5

使用按位运算/使用 JavaScript 进行移位测试

0x80000000 >> 1 // returns -1073741824 (-0x40000000)

我希望它会返回 0x40000000 因为

0x40000000 >> 1 // returns 0x20000000
0x20000000 >> 1 // returns 0x10000000
4

2 回答 2

10

它是一个算术移位,这就是为什么保留符号,做一个逻辑移位使用>>>

0x80000000 >>> 1 // returns 1073741824 (0x40000000)
于 2012-12-27T22:23:32.000 回答
4

在 Javascript 中,>>是有符号右移运算符。在语言规范的第 11.7.2 节中,它说:

按右操作数指定的量对左操作数执行符号填充按位右移操作。

在移位完成之前,左操作数被转换为有符号的 32 位整数(规范中给出的算法的第 5 步)。在您的情况下,此转换会将给定的正数转换为负值。之后,实际移位完成,保留值的负号。

于 2012-12-27T22:43:57.883 回答