在Javascript中,右操作数超过31的移位操作究竟做了什么?

时间:2017-12-28 21:52:47

标签: javascript

我知道按位操作的操作数在Javascript中被视为32位整数。所以我认为如果我对整数值进行<< 32则会为零。但它就好像它是<< 0一样。为什么它以这种方式起作用?在Javascript中,右操作数超过31的移位操作到底是什么?

0b00000000000000000000000000000001 << 32 // 1
0b00000000000000000000000000000001 << 33 // 2
0b00000000000000000000000000000001 << 34 // 4

0b00000000000000000000000000000001 >> 30 // 0
0b00000000000000000000000000000001 >> 31 // 0
// Something weird is happening.......
0b00000000000000000000000000000001 >> 32 // 1
0b00000000000000000000000000000001 >> 33 // 0

1 个答案:

答案 0 :(得分:9)

它会截断右操作数的二进制表示。

来自Bitwise Shift Operators的文档:

  

移位运算符将其操作数转换为32位整数   big-endian顺序并返回与左边相同类型的结果   操作数。 右操作数应小于32,但如果不是   将使用低五位。

因此,在您的示例中,320b100000。由于它只剩下0b00000所留下的最低五位,因此它将数字移动0。同样,330b100001,最低的五位为0b00001,因此将数字移至1。等等。