gpt4 book ai didi

javascript - 大整数的位运算

转载 作者:可可西里 更新时间:2023-11-01 02:38:05 26 4
gpt4 key购买 nike

我正在实现 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com