javascript - Int32Array 类型的最高和最低整数?

标签 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 会发生这种情况吗?为什么有这些值(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/

相关文章:

c - 将 float 转换为 int 的区别,32 位 C

javascript - Typeahead 并未显示 json 中的所有项目

从 uint16_t 转换并转换为 int16_t

windows - 为什么 Windows 32 位称为 Windows x86 而不是 Windows x32?

java - 如何避免 BufferUnderflowException

c++ - 动态大小的 boost::asio::buffer

64-bit - 什么是 16、32 和 64 位架构?

javascript - 动态设置下拉列表的选定默认值

javascript - “动态”Javascript 数组名称?

javascript - node.js opc ua 许多监控项