Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.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 Int32Array中出现意外负值_Javascript_Arrays_Integer - Fatal编程技术网

Javascript Int32Array中出现意外负值

Javascript Int32Array中出现意外负值,javascript,arrays,integer,Javascript,Arrays,Integer,谁能解释为什么有一个负数?Int32Array允许每个值32位,保留第32位(从右侧)来指定数字的符号。您试图拟合的数字是(699044815921)。toString(2).length==40位长,因此丢弃8个最左边的位,将第32位解释为符号位,并得到结果。因为您没有使用无符号整数数组:如果变量是有符号整数类型,程序可能会假定变量始终包含正值。整数溢出可导致值换行并变为负值,这违反了程序的假设,并可能导致意外行为(例如,127+1的8位整数相加会导致−128,一个2的128的补码。)“尝试使

谁能解释为什么有一个负数?

Int32Array允许每个值32位,保留第32位(从右侧)来指定数字的符号。您试图拟合的数字是
(699044815921)。toString(2).length==40
位长,因此丢弃8个最左边的位,将第32位解释为符号位,并得到结果。

因为您没有使用无符号整数数组:如果变量是有符号整数类型,程序可能会假定变量始终包含正值。整数溢出可导致值换行并变为负值,这违反了程序的假设,并可能导致意外行为(例如,127+1的8位整数相加会导致−128,一个2的128的补码。)“尝试使用intval()为了解决这个问题。此外,这个数字甚至太大,无法用32位无符号整数表示。如何求解它并存储大整数?首先请记住使用float64来存储感谢您的解释。为了进一步研究,您可以使用二进制常量来查看符号位对数字的影响:
let x=new Int8Array(1);x[0]=0b00000001;console.log(x[0]);x[0]=0b10000001;console.log('符号位集',x[0]);x[0]=0b111110000001;console.log('4位溢出',x[0]);
const x = new Int32Array(1);

x[0] = 699044815921;
console.log(x[0]);
-1034853327