在 JavaScript 中算术左移 30 次

arithmetic left shift 30 times in javascript?

本文关键字:左移 JavaScript      更新时间:2023-09-26
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 的补码算法。