es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Poner a cero todos los bits después del segundo índice.

Quiero poner a cero todos los bits a partir del segundo índice (incluyendo el segundo) en un unsigned int. Aquí está el código que escribí hasta ahora pero no funciona: (temp es un unsigned int.)

for(int i=2; i< DSLength(dnaS); i++)
        {
            temp = temp & (0 << i);
        }

¡Sigue poniendo a cero todo el número…

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema con el código proporcionado es que se está realizando una operación AND bit a bit con un desplazamiento hacia la izquierda de 0, lo que siempre dará como resultado 0. En cambio, el código debería realizar una operación OR bit a bit para establecer todos los bits después del segundo índice en 0.

    Aquí hay un ejemplo de fragmento de código que debería lograr el resultado deseado:

    unsigned int temp = 0xFFFFFFFF; // valor de entrada de ejemplo
    unsigned int mask = ~(0xFFFFFFFF << 2); // crear una máscara para borrar los bits después del segundo índice
    
    temp = temp & mask; // aplicar la máscara al valor de entrada
    
    // ahora, temp contiene el valor de entrada original con todos los bits después del segundo índice establecidos en 0
    

    Explicación:

    • 0xFFFFFFFF representa un unsigned int con todos los bits establecidos en 1. Esto se utiliza como valor de entrada de ejemplo.
    • ~(0xFFFFFFFF << 2) crea una máscara para borrar todos los bits después del segundo índice. Esto se hace mediante un desplazamiento hacia la izquierda de todos los bits en 2, luego negando el resultado.
    • La operación AND bit a bit entre temp y mask aplica la máscara a temp, lo que resulta en que todos los bits después del segundo índice se establecen en 0.

Comments are closed.