JavaScript 32ビット整数無符号操作例
738 ワード
JavaScriptでは、すべての整数値がデフォルトで符号化されていますが、これは何を意味しますか?
符号のある整数は31ビットを使用して整数の数値を表し、32桁目で整数の符号を表し、0は正、1は負を表します.
数値範囲は-2^31-2^31-1つまり-2147483648から2147483647までです.
JavaScriptがビット操作を行う場合は、32ビットの符号付きパターンを採用しています.これは、変換の結果も32ビットの符号型があることを意味します.時々、私たちがシフトすると予想外の結果が出ます.以下はC言語とJSの対比です.
C言語
私たちはJavaScriptの中の有記号数を無符号数に変換できます.>>>0のシフト操作だけが必要です.
一番左の方がシンボルビットに解析されますので、数字があふれたら負の値に解析されます.
符号のある整数は31ビットを使用して整数の数値を表し、32桁目で整数の符号を表し、0は正、1は負を表します.
数値範囲は-2^31-2^31-1つまり-2147483648から2147483647までです.
JavaScriptがビット操作を行う場合は、32ビットの符号付きパターンを採用しています.これは、変換の結果も32ビットの符号型があることを意味します.時々、私たちがシフトすると予想外の結果が出ます.以下はC言語とJSの対比です.
C言語
unsigned int a = 3774191835u;
unsigned int b = a >> 2;
/* b == 943547958 */
JavaScript
var a = 3774191835;
var b = a >> 2;
/* b == -130193866 */
JavaScriptはビット演算を行う時に使用される記号の形を整えているので、違った結果を得ました.どう解決しますか私たちはJavaScriptの中の有記号数を無符号数に変換できます.>>>0のシフト操作だけが必要です.
一番左の方がシンボルビットに解析されますので、数字があふれたら負の値に解析されます.