我知道按位操作的操作数在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
答案 0 :(得分:9)
它会截断右操作数的二进制表示。
来自Bitwise Shift Operators的文档:
移位运算符将其操作数转换为32位整数 big-endian顺序并返回与左边相同类型的结果 操作数。 右操作数应小于32,但如果不是 将使用低五位。
因此,在您的示例中,32
为0b100000
。由于它只剩下0b00000
所留下的最低五位,因此它将数字移动0
。同样,33
为0b100001
,最低的五位为0b00001
,因此将数字移至1
。等等。