Javascript左移操作符如何工作?

时间:2014-08-09 06:50:47

标签: javascript bitwise-operators bit-shift

我注意到Javascript有一种奇怪的行为:当我执行1967779 << 11时,我得到一个否定结果:-264955904

但是,如果我在Python解释器中运行相同的行,我会得到正确答案:4030011392

请注意,Firefox和Chrome的Javascript控制台都返回了相同的负数,因此它必须是Javascript本身而不是引擎的问题。

为什么我在Python和Javascript之间获得不同的值?我该怎么做才能解决这个问题? Javascript左移操作符如何工作?

1 个答案:

答案 0 :(得分:5)

因为JavaScript引擎中此按位运算的返回值是带符号的32位整数,只能表示从-2147483648到2147483647的数字。

通过设置信号位(32位链中最高相关位(2 ^ 31))来控制整数是负还是正。如果0为正数,则为1为负数。

因此,4030011392大于2147483647,这意味着信号位在此过程中“意外”设置为1,导致数字变为负数。