为什么0x80000000>> 1在JavaScript中产生负值?

时间:2012-12-27 22:14:27

标签: javascript bit-manipulation

使用按位操作进行一些测试/使用JavaScript进行移位

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

我希望从

开始返回0x40000000
0x40000000 >> 1 // returns 0x20000000
0x20000000 >> 1 // returns 0x10000000

2 个答案:

答案 0 :(得分:9)

这是arithmetic shift这就是为什么要保留这个标志,要logical shift使用>>>

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

答案 1 :(得分:3)

在Javascript中,>>签名右移运算符。在language specification的§11.7.2中,它说:

  

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

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

相关问题