const x = new Int32Array(1);
x[0] = 699044815921;
console.log(x[0]);
-1034853327
なぜ、負の数があるのか説明できますか?Int32Arrayで予期しない負の値が発生する
const x = new Int32Array(1);
x[0] = 699044815921;
console.log(x[0]);
-1034853327
なぜ、負の数があるのか説明できますか?Int32Arrayで予期しない負の値が発生する
Int32Arrayは値ごとに32ビットを許可し、32ビット目(右から)は番号の符号を指定するために予約されています。あなたが収めようとしている数字は、ビット長が(699044815921).toString(2).length == 40
ビットなので、左端の8ビットは破棄され、32ビット目は符号ビットとして解釈され、結果として得られるものが得られます。
ありがとうございます。 – XMANX
さらなる研究のために、バイナリ定数を使って、符号ビットがどのように数値に影響を与えるかを見ることができます: '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]); ' –
符号なし整数配列を使用していないため、 –
https://en.wikipedia.org/wiki/Integer_overflow:* "変数に符号付き整数型がある場合、プログラムは変数には常に整数オーバーフローが発生すると、値が折り返されて負になり、プログラムの前提に違反し、予期しない動作につながる可能性があります(たとえば、127 + 1の8ビット整数加算の結果が-128、 128)。 "* –
これを修正するには、intval()を使用してください。 –