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
?
答案 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算术。