javascript – 具有大整数的按位操作

前端之家收集整理的这篇文章主要介绍了javascript – 具有大整数的按位操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在实现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

虽然第一个解决方法(乘法而不是左移)是可以接受的,但第二个不是.

为什么会发生怎么忍受?

解决方法

17516032的二进制是00000001000010110100011000000000.向左移动7给你10000101101000110000000000000000.这等于-20000年的-2052915200(几乎所有的电脑几乎代表负数).

>>是一个签名右转.这意味着最左边的位(确定一个数字的符号)将被移入左边.

例如

1100 >> 2 == 1111
0111 >> 2 == 0001

如果要执行无符号移位(忽略符号位),请使用>>>这将填补bitstring的左端.

猜你在找的JavaScript相关文章