Javascriptビット演算
1904 ワード
Javascriptはビット操作をサポートしています.例えば、|、^、~、それぞれと、あるいは、異種、非操作です.またシフト操作もあります.
ここでは主にシフト操作について説明します.本を読んでJavascriptを勉強しているうちに、ビット操作、特にシフト操作を省略しました.今日は筆記試験問題を作りました.中には一人だけの操作の問題があり、心を潜めて見ました.
ビット演算子は、数字の下の32桁で動作します.
符号なし整数は最後のビットを別のビットとして処理します.
符号付き整数では、0-30位が数値ビットであり、31位が符号ビットである.負の数はバイナリ補数として記憶されます.(私の知識で判断します.実は全部の数は正数を含めてもバイナリ補数として保存されています.正数の原数と補数は同じです.)
負の数の補数を求める過程:元のコード-->記号のビットは不変で、他のビットは逆の符号を取ります.
興味深いことに、負の整数をバイナリ文字列に変換した後、ECMAScriptはバイナリ補数で表示されるのではなく、数字の絶対値の標準バイナリコードの前に負の符号で出力されます.
たとえば:
左のシフト演算(<>)は、指定された数の数字を左に移動します.左に移動すると、数字の右側の空きスペースが0で満たされます.
例えば、
符号付き右シフト演算(>)
32桁の数字のすべての桁を右に移動しながら、その数の記号を保持します.移動時は、数字の左側の空席を、記号のビットの値で埋めます.
例:
13>>2=3
1101 -> 11
-13>>2=-4
説明:
100000 0000 0000 000001(原コード)->11111 11111111 11110010(逆コード)->11111 11111111 11111111 11110011(補数コード)->11110011
11111111 11111 11111111 111111111111111-11100->11111 11111 11111 11111011(反番号)->
100000 0000 0000 0000 0000 0000(原コード)10進は-4となります.
符号なしで右に移動(>>)
32桁の数字のすべての桁を右に移動します.移動時は数字の左側の空席を0で埋めます.したがって、正の数に対しては符号なしで右にシフトした演算の結果は符号付きで右にシフトした演算と同じです.
ここでは主にシフト操作について説明します.本を読んでJavascriptを勉強しているうちに、ビット操作、特にシフト操作を省略しました.今日は筆記試験問題を作りました.中には一人だけの操作の問題があり、心を潜めて見ました.
ビット演算子は、数字の下の32桁で動作します.
符号なし整数は最後のビットを別のビットとして処理します.
符号付き整数では、0-30位が数値ビットであり、31位が符号ビットである.負の数はバイナリ補数として記憶されます.(私の知識で判断します.実は全部の数は正数を含めてもバイナリ補数として保存されています.正数の原数と補数は同じです.)
負の数の補数を求める過程:元のコード-->記号のビットは不変で、他のビットは逆の符号を取ります.
興味深いことに、負の整数をバイナリ文字列に変換した後、ECMAScriptはバイナリ補数で表示されるのではなく、数字の絶対値の標準バイナリコードの前に負の符号で出力されます.
たとえば:
- var iNum = -18;
- alert(iNum.toString(2));// “-10010”
左のシフト演算(<>)は、指定された数の数字を左に移動します.左に移動すると、数字の右側の空きスペースが0で満たされます.
例えば、
- var iOld = 2;// 10
- var iNew = iOld << 5;// 10 00000 64
符号付き右シフト演算(>)
32桁の数字のすべての桁を右に移動しながら、その数の記号を保持します.移動時は、数字の左側の空席を、記号のビットの値で埋めます.
例:
13>>2=3
1101 -> 11
-13>>2=-4
説明:
100000 0000 0000 000001(原コード)->11111 11111111 11110010(逆コード)->11111 11111111 11111111 11110011(補数コード)->11110011
11111111 11111 11111111 111111111111111-11100->11111 11111 11111 11111011(反番号)->
100000 0000 0000 0000 0000 0000(原コード)10進は-4となります.
符号なしで右に移動(>>)
32桁の数字のすべての桁を右に移動します.移動時は数字の左側の空席を0で埋めます.したがって、正の数に対しては符号なしで右にシフトした演算の結果は符号付きで右にシフトした演算と同じです.