算术左移30次javascript?

时间:2015-03-18 01:44:41

标签: javascript

2<<2 === Math.pow(2,3) // true
2<<30 === Math.pow(2, 31) // false, why?

我认为Math.pow与&lt;&lt ;; 为什么Math.pow(2, 31)不等于2<<30

1 个答案:

答案 0 :(得分:2)

回答您的原始问题,“为什么2 <&lt;&lt; 30等于-2,147,483,648?”

<<是左移位运算符,因此2 << 30表示“将值2向左移位30位”。

作为32位整数的值2是:

0000 0000 0000 0000 0000 0000 0000 0010

如果将所有位向左移动30个空格,则可以:

1000 0000 0000 0000 0000 0000 0000 0000

该值为-2,147,483,648,因为MSB(最高有效位)是符号位,这使得数字为负数。这是因为您的计算机使用Two's complement算术。