输入Int32Array最高和最低的整数?

时间:2016-08-28 17:12:10

标签: javascript buffer 32-bit

我已经完成了最低和最高整数值的实验,如果我走高,它会分别遍历为负数或正数。

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中发生这种情况吗?为什么这些价值?在其他浏览器,移动设备和操作系统中,它会受到同样的影响吗?

1 个答案:

答案 0 :(得分:1)

  

有人可以解释为什么会在JavaScript中发生这种情况吗?

它不仅仅是JavaScript,几乎所有的编程语言都使用相同的底层机制("两个补充")作为整数类型。这是两个补语整数的一个特征:当你超出范围时,你就会环绕。 Int32Array是一个32位二进制补码整数数组。 (而JavaScript的正常数字类型不是;它是IEEE-754双精度二进制浮点数。)

让我们看一下2147483647:

的位
01111111 11111111 11111111 11111111

当你加1时,你得到

10000000 00000000 00000000 00000000

...这是-2147483648。当然,如果再次拿走1,你会得到原版(2147483647)。

更多关于维基百科here的两个补充。

  

为什么要这些价值?

因为使用带符号的32位整数,这是可用范围。 -2 32 至2 32 -1,包括端值。如果你使用的是Int8Array,则范围是-128(-2 8 )到127(2 8 -1)。

  

在其他浏览器,移动设备和操作系统中,它会受到同样的影响吗?

是。如果他们没有,他们将无法正确实施Int32Array