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.
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:
En este ejemplo, la variable
$num
contiene el valor decimal 123456789, que en binario es111010110111100110100010101
. Cuando aplicamos el operador NOT a nivel de bits a$num
, obtenemos00010100100001100101110101011
, 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.