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.

PHP invertir número entero de 32 bits

Obtener un entero sin signo de 32 bits. Invertir todos los bits (0->1 y 1->0) y devolver el resultado como un entero sin signo.

Tomemos 1 como ejemplo, como un entero sin signo de 32 bits es 00000000000000000000000000000001 y al invertir los bits obtenemos 11111111111111111111111111111110 que, a su vez, es 4294967294.

Puedo convertir números decimales a binario, pero no contienen 32 bits para invertir. Por favor, ayúdame con esto.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Por supuesto, puedo ayudarte con eso. En PHP, puedes usar el operador NOT a nivel de bits (~) para invertir todos los bits de un número. Para asegurarte de que el valor se trate como un entero sin signo de 32 bits, puedes usar el operador de desplazamiento a la derecha sin signo (>>>) para descartar el bit de signo.

    Aquí tienes un ejemplo de código:

    <?php
    $num = 123456789;
    $flipped = ~$num & 0xffffffff;
    echo $flipped; // salida: 4161510506
    ?>
    

    En este ejemplo, la variable $num contiene el valor decimal 123456789, que en binario es 111010110111100110100010101. Cuando aplicamos el operador NOT a nivel de bits a $num, obtenemos 00010100100001100101110101011, que es el valor invertido.

    Sin embargo, este valor se trata como un número negativo con signo porque el bit más a la izquierda está establecido en 1. Para convertirlo de nuevo a un entero sin signo de 32 bits, usamos el operador AND a nivel de bits (&) con la máscara 0xffffffff, que establece todos los bits en 1 excepto el bit de signo. Esto nos da el resultado final de 4161510506.

    ¡Espero que esto te ayude! Avísame si tienes alguna otra pregunta.

Comments are closed.