2017-09-05 7 views
0
const x = new Int32Array(1); 

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

なぜ、負の数があるのか​​説明できますか?Int32Arrayで予期しない負の値が発生する

+1

符号なし整数配列を使用していないため、 –

+1

https://en.wikipedia.org/wiki/Integer_overflow:* "変数に符号付き整数型がある場合、プログラムは変数には常に整数オーバーフローが発生すると、値が折り返されて負になり、プログラムの前提に違反し、予期しない動作につながる可能性があります(たとえば、127 + 1の8ビット整数加算の結果が-128、 128)。 "* –

+0

これを修正するには、intval()を使用してください。 –

答えて

1

Int32Arrayは値ごとに32ビットを許可し、32ビット目(右から)は番号の符号を指定するために予約されています。あなたが収めようとしている数字は、ビット長が(699044815921).toString(2).length == 40ビットなので、左端の8ビットは破棄され、32ビット目は符号ビットとして解釈され、結果として得られるものが得られます。

+0

ありがとうございます。 – XMANX

+0

さらなる研究のために、バイナリ定数を使って、符号ビットがどのように数値に影響を与えるかを見ることができます: '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]); ' –

関連する問題