我正在实现BER压缩整数的解码,最近我发现了一个奇怪的JavaScript行为,这个行为与大整数的位运算有关。大整数的按位运算
例如为:
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
虽然第一个解决方法(乘法代替左移)是可接受的,第二个是不。
为什么会发生?如何忍受它?
我不明白为什么这个师不会被接受? – Guffa
@Guffa我需要一些通用的方法,不仅适用于32位整数。 –
除法不在整数上执行,它在浮点数上执行,所以我不理解你的论点。此外,双精度浮点数只能表示一个53位的整数,所以如果你想解码BER压缩的数字,那就没什么问题了。 – Guffa