Estoy implementando decodificación de enteros BER-comprimidos y recientemente he encontrado un extraño comportamiento de JavaScript relacionado con operaciones bit a bit con enteros grandes.Operaciones bit a bit con enteros grandes
ej .:
var a = 17516032; // has 25 bits
alert(a << 7) // outputs -2052915200
alert(a * 128) // outputs 2242052096
alert(2242052096 >> 16) // outputs -31325
alert(2242052096/65536) // outputs 34211
Mientras que la primera solución (multiplicación en lugar de desplazamiento a la izquierda) es aceptable, el segundo no lo es.
¿Por qué sucede? ¿Cómo soportarlo?
¿No entiendo por qué la división no sería aceptable? – Guffa
@Guffa Necesito un enfoque general, no solo para enteros de 32 bits. –
La división no se realiza en enteros, se realiza en números de punto flotante, por lo que no entiendo su argumento. Además, un número de punto flotante de precisión doble solo puede representar un número entero de 53 bits, por lo que no es mucho si quiere decodificar números comprimidos en BER. – Guffa