在JS中,位运算符只为32位数字定义,安全范围是Math.pow(-2,31)到Math.pow(2,31)-1。
并且可以使用| 0将一个数字强制转换为32位有符号整数
所以我在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会导致一个负数?
发布于 2017-05-18 13:38:46
在按位运算中,javascript使用32位整数进行操作。它的最大值是2147483647,所以当你超过这个数字时,会变成一个负值。如果你在java中做这样的事情:
int x = 2147483647;
x++;结果是-2147483648,这在javascript中是相同的。执行Math.pow(2,31) | 0时超出了整数的最大大小。
https://stackoverflow.com/questions/44039331
复制相似问题