javascript - 按位运算产生的 32 位 JavaScript 数字如何转换回 64 位数字

标签 javascript bit-manipulation

我试图了解 JavaScript 中的按位运算是如何工作的,更具体地说,如何将按位运算产生的 32 位数字转换回 64 位 JavaScript 数字。在设置 32 位数字中最左边的位以及操作溢出时,我得到一些奇怪的结果。

例如,进行以下操作:

0x01 << 31

如果数字长度为 32 位,通常会产生 0x80000000。但是,当 JavaScript 将此数字转换回 64 位值时,它会用 1 填充最左边的 32 位,从而得到值 FFFFFFFF80000000

同样,当左移32位,从而溢出32位整数时,操作为:

0x02 << 32

数字会溢出,结果值应为0x00。但生成的 JavaScript 编号是 0x02

JavaScript 用于按位运算是否有我不知道的特定规则?我知道所有按位运算都是使用 32 位整数执行的,并且 JavaScript 数字是 64 位 double float ,但我无法理解在两者之间转换时额外的填充来自哪里。

最佳答案

  1. 按位运算符的结果是有符号 int32,当它们转换回数字时,符号位会传播。

  2. 移位不能超过 31 位:

Let shiftCount be the result of masking out all but the least significant 5 bits of rnum, that is, compute rnum & 0x1F.

x<<32x<<0 相同.

关于javascript - 按位运算产生的 32 位 JavaScript 数字如何转换回 64 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15517646/

相关文章:

Javascript 数组范围问题

math - 如何在不使用任何算术运算的情况下找到 x mod 15?

matlab - Matlab中的位级运算

javascript - 检查具有一定宽度的div

javascript - 猫头鹰旋转木马2 : Lazy load for videos

javascript - 如何防止浏览器后退按钮重新显示我的用户通知?

haskell - 如何在haskell中进行位移和掩码?

c - 此代码如何为任何给定数字找到 2 的下一个最高幂

c - 通过编辑数组元素的最后一位对数字进行编码

javascript - 加密媒体扩展加密示例