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.

Cambie un bit especificado a 0.

Tengo un número:

11100111

Deseo realizar una operación para cambiar un bit específico de mi elección a 0.

Entonces, si quisiera que fuera:

10100111

para el séptimo bit, ¿qué operación utilizaría, por ejemplo:

$x = 6;
$y = “11100111”;

Se va a ver algo como:

$z = $y & $x

Pero sé que eso está equivocado. Sé que podría restar 2^$x del valor, pero eso parece inelegante.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para cambiar el séptimo bit del número de 1 a 0, debes usar el operador de “y” bit a bit para borrar el bit. El operador de “y” bit a bit se representa con el símbolo &.

    Primero, necesitas crear una máscara de bits para apuntar al séptimo bit. La máscara de bits para el séptimo bit es 01000000 en binario o 64 en decimal. Esta máscara de bits se crea desplazando un 1 a la izquierda 6 bits:

    $mascara = 1 << 6;  # $mascara ahora es 64 (decimal) o 01000000 (binario)
    

    A continuación, puedes usar el operador de “no” bit a bit para crear una máscara que tenga todos los bits establecidos en 1 excepto el séptimo bit, que se establece en 0. El operador de “no” bit a bit se representa con el símbolo ~.

    $mascara_no = ~$mascara;  # $mascara_no ahora es 191 (decimal) o 10111111 (binario)
    

    Finalmente, puedes usar el operador de “y” bit a bit para borrar el séptimo bit:

    $y = "11100111";
    $y = $y & $mascara_no;  # $y ahora es "10100111"
    

    El operador de “y” bit a bit borra el séptimo bit porque cualquier bit que sea 0 en la máscara se borra en el resultado, y cualquier bit que sea 1 en la máscara se conserva en el resultado. En este caso, el séptimo bit es 0 en la máscara, por lo que se borra en el resultado.

Comments are closed.