2<<2 === Math.pow(2,3) // true
2<<30 === Math.pow(2, 31) // false, why?
我认为 Math.pow 与<<相同;为什么Math.pow(2, 31)
不等于2<<30
?
回答您最初的问题,"为什么 2 <<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 的补码算法。