Esto funciona como se esperaba:
> 0b1111 15 > 0b1111 & 0b1111 15Pero esto no:
> 0b11111111111111111111111111111111 4294967295 > 0b11111111111111111111111111111111 & 0b11111111111111111111111111111111 -1¿Que está pasando aqui? ¿Y cómo puedo realizar operaciones bit a bit de manera segura en números grandes (hasta 2 ^ 32) en Javascript?
Actualización: esto está debajo Number.MAX_SAFE_INTEGER , por lo que no creo que deba haber una pérdida de precisión.
¿Que está pasando aqui?
Los operadores bit a bit de JavaScript interpretarán el resultado como un número de 32 bits con signo (una excepción es el operador >>> ), pero aparte de eso, el resultado es correcto.
¿Y cómo puedo realizar operaciones bit a bit de manera segura en números grandes (hasta 2 ^ 32) en Javascript?
Aplique >>> 0 al resultado para que el resultado se interprete como un número de 32 bits sin signo :
let res = (0b11111111111111111111111111111111 & 0b11111111111111111111111111111111) >>> 0; console.log(res);