javascript - 大整数的位运算

标签 javascript integer bit-manipulation

我正在实现 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。这等于 two's complement 中的 -2052915200 (这几乎是所有计算机表示负数的方式)。

>>> 是一个带符号的右移。这意味着最左边的位(决定数字的符号)将移到左侧。

例如

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

如果你想做一个无符号移位(忽略符号位),使用 >>> 它将零填充位串的左端。

关于javascript - 大整数的位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6847636/

相关文章:

javascript - 单击以打开图像并单击以将其关闭

rust - 你如何在 Rust 中设置、清除和切换单个位?

javascript - d3 缩放行为。小幅增加规模

java - Java 中 Swift 整数 "Overflow Operators"&*、&+ 和 &- 的等价物是什么?

java - 如何使用parseInt将字符串转换为整数?

c - 在 C 中对 char* 中的数字求和

c - C : how this function works? 中的按位运算符

math - 41 位可以表示多少年的毫秒时间戳?

javascript - 当工具提示出现时,顶部的 Chart.JS 值消失

javascript - 在挂载之前 react 处理空对象的最佳方法?