Javascript(Math.pow(2,31)| 0)生成负数
据说在JS中,按位运算符只为32位数字定义,安全范围是Javascript(Math.pow(2,31)| 0)生成负数,javascript,math,Javascript,Math,据说在JS中,按位运算符只为32位数字定义,安全范围是Math.pow(-2,31)到Math.pow(2,31)-1 使用|0 所以我在Chrome的控制台上进行了测试: Math.pow(2,30) | 0 1073741824 Math.pow(2,31) 2147483648 Math.pow(2,31) | 0 -2147483648 Math.pow(2,32) | 0 0 为什么正数按位或0会产生负数?在按位运算中,javascript使用32位整数操作。其最大值为2147483
Math.pow(-2,31)
到Math.pow(2,31)-1
使用|0
所以我在Chrome的控制台上进行了测试:
Math.pow(2,30) | 0
1073741824
Math.pow(2,31)
2147483648
Math.pow(2,31) | 0
-2147483648
Math.pow(2,32) | 0
0
为什么正数按位或0会产生负数?在按位运算中,javascript使用32位整数操作。其最大值为2147483647,因此当您超过该值时,将更改为负值。如果您在java中执行类似操作:
int x = 2147483647;
x++;
结果是
-2147483648
,这在javascript中是相同的。当您执行Math.pow(2,31)|0溢出时,您可能超过了整数的最大大小。为了澄清javascript,值在Math.pow(2,31)-1
之后溢出,这是(2147483647 ms)
,刚刚超过(596小时)