我已经对最低和最高整数值进行了实验,如果我升高,它会分别变为负值或正值。
var x = new Int32Array(3);
x[0] = 2147483647;
x[1] = -2147483648;
console.log(x[0]);
console.log(x[1]);
console.log(x.length);
//Results:
//2147483647 cannot go above unless -2147483648*
//-2147483648 cannot go above unless 2147483647*
//2
有人能解释一下为什么 JavaScript 会发生这种情况吗?为什么有这些值(value)观?在其他浏览器、移动设备和操作系统中,是否会有同样的影响?
最佳答案
Could someone explain why this happens in JavaScript?
不仅仅是 JavaScript,几乎所有编程语言都对其整数类型使用相同的底层机制(“二进制补码”)。这是补码整数的一个特性:当超出范围时,就会回绕。 Int32Array
是 32 位二进制补码整数的数组。 (而 JavaScript 的普通数字类型不是;它是 IEEE-754 double 二进制 float 。)
让我们看看 2147483647 的各个位:
01111111 11111111 11111111 11111111
当你加 1 时,你会得到
10000000 00000000 00000000 00000000
...即-2147483648。当然,如果你再次从它中取出 1,你就会得到原来的 (2147483647)。
更多关于维基百科上的补码 here .
Why those values?
因为对于有符号 32 位整数,这就是可用范围。 -232 到 232-1(含)。如果您使用 Int8Array
,则范围将为 -128 (-28) 到 127 (28-1)。
In other browsers, mobile devices and operating systems, would it be the same affect?
是的。如果不这样做,他们就无法正确实现 Int32Array
。
关于javascript - Int32Array 类型的最高和最低整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39193827/