Javascript左移操作符是如何工作的

How does the Javascript left shift operator work?

本文关键字:工作 何工作 左移 操作符 Javascript      更新时间:2023-09-26

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

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

请注意,Firefox和Chrome的Javascript控制台都返回相同的负数,所以这一定是Javascript本身的问题,而不是引擎的问题。

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

因为在JavaScript引擎中这个按位操作的返回值是一个32位整数,只能表示从-2147483648到2147483647的数字。

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

所以碰巧4030011392大于2147483647,这意味着信号位在处理过程中被"意外"设置为1,导致数字变为负数。