我注意到Javascript有一种奇怪的行为:当我执行1967779 << 11
时,我得到一个否定结果:-264955904
但是,如果我在Python解释器中运行相同的行,我会得到正确答案:4030011392
请注意,Firefox和Chrome的Javascript控制台都返回了相同的负数,因此它必须是Javascript本身而不是引擎的问题。
为什么我在Python和Javascript之间获得不同的值?我该怎么做才能解决这个问题? Javascript左移操作符如何工作?
答案 0 :(得分:5)
因为JavaScript引擎中此按位运算的返回值是带符号的32位整数,只能表示从-2147483648到2147483647的数字。
通过设置信号位(32位链中最高相关位(2 ^ 31))来控制整数是负还是正。如果0为正数,则为1为负数。
因此,4030011392大于2147483647,这意味着信号位在此过程中“意外”设置为1,导致数字变为负数。