Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript(Math.pow(2,31)| 0)生成负数_Javascript_Math - Fatal编程技术网

Javascript(Math.pow(2,31)| 0)生成负数

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

据说在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位整数操作。其最大值为2147483647,因此当您超过该值时,将更改为负值。如果您在java中执行类似操作:

int x = 2147483647;
x++;

结果是
-2147483648
,这在javascript中是相同的。当您执行
Math.pow(2,31)|0

溢出时,您可能超过了整数的最大大小。为了澄清javascript,值在
Math.pow(2,31)-1
之后溢出,这是
(2147483647 ms)
,刚刚超过
(596小时)