我试图了解 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 ,但我无法理解在两者之间转换时额外的填充来自哪里。
最佳答案
按位运算符的结果是有符号 int32,当它们转换回数字时,符号位会传播。
移位不能超过 31 位:
即x<<32
与 x<<0
相同.
关于javascript - 按位运算产生的 32 位 JavaScript 数字如何转换回 64 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15517646/