我正在實現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