JavaScript のビット演算
JavaScript ビット演算子
演算子 | 使用例 | 説明 |
---|---|---|
& | a&b | aとbの論理積(ビットAND) |
| | | a | | b | aとbの論理和(ビットOR) |
^ | a ^ b | aとbの排他的論理和(ビットXOR) |
〜 | ~a | aのビット反転(ビットNOT) |
<< | a << n | aを左へnビットシフト |
>> | a >> n | aを右へnビットシフト(符号有り) |
>>> | a >>> n | aを右へnビットシフト(符号無し) |
例
使用例 | 結果 | 2進数表記 | 結果 |
---|---|---|---|
5 & 1 | 1 | 0101 & 0001 | 0001 |
5 | 1 | 5 | 0101 | 0001 | 0101 |
〜5 | 10 | ~0101 | 1010 |
5 << 1 | 10 | 0101 << 1 | 1010 |
5^1 | 4 | 0101 ^ 0001 | 0100 |
5 >> 1 | 2 | 0101 >> 1 | 0010 |
5 >>> 1 | 2 | 0101 >>> 1 | 0010 |
JavaScriptは32ビットのビットオペランドを使用します
JavaScriptは数値を64ビットの浮動小数点数として格納しますが、すべてのビット演算は32ビットの2進数で実行されます。
ビット演算が実行される前に、JavaScriptは数値を32ビットの符号付き整数に変換します。
ビット単位の演算が実行された後、結果は64ビットのJavaScript 数値に変換されます。
上記の例では、4ビットの符号なし2進数を使用しているため~5は10を返します。
JavaScriptは32ビットの符号付き整数を使用し、10を返さないかわりに-6を返します。
0000000000000000000000000000101(5)
111111111111111111111111111010(~5 = -6)
符号付き整数は、左端のビットをマイナス記号として使用します。
JavaScriptビットごとのAND
ビットのペアに対してビットごとのANDを実行すると、両方のビットが1の場合に1が返されます。
1ビット(AND)例:
使用例 | 結果 |
---|---|
0 & 0 | 0 |
0 & 1 | 0 |
1 & 0 | 0 |
1 & 1 | 1 |
4ビット(AND)例:
使用例 | 結果 |
---|---|
1111 & 0000 | 0000 |
1111 & 0001 | 0001 |
1111 & 0010 | 0010 |
1111 & 0100 | 0100 |
JavaScriptビットごとのOR
ビットのペアに対してビットごとのORを実行すると、ビットの1つが1の場合に1が返されます。
1ビット(OR )例:
使用例 | 結果 |
---|---|
0 | | 0 | 0 |
0 | | 1 | 1 |
1 | | 0 | 1 |
1 | | 1 | 1 |
4ビット(OR)例:
使用例 | 結果 |
---|---|
1111 | | 0000 | 1111 |
1111 | | 0001 | 1111 |
1111 | | 0010 | 1111 |
1111 | | 0100 | 1111 |
JavaScriptビット単位のXOR
ビットのペアでビットごとのXORが実行されると、ビットが異なる場合は1が返されます。
1ビット(XOR)例:
使用例 | 結果 |
---|---|
0 ^ 0 | 0 |
0 ^ 1 | 1 |
1 ^ 0 | 1 |
1 ^ 1 | 0 |
4ビット(XOR)例:
使用例 | 結果 |
---|---|
1111 ^ 0000 | 1111 |
1111 ^ 0001 | 1110 |
1111 ^ 0010 | 1101 |
1111 ^ 0100 | 1011 |
JavaScript ビットごとの AND (&)
ビットごとのANDは、両方のビットが1の場合にのみ1を返します。
10進数 | 2進数 |
---|---|
5 | 0000000000000000000000000000101 |
1 | 0000000000000000000000000000001 |
5 & 1 | 0000000000000000000000000000001 (1) |
JavaScriptビットごとのOR(|)
ビットごとのOR は、いずれかのビットが1の場合に1を返します。
10進数 | 2進数 |
---|---|
5 | 0000000000000000000000000000101 |
1 | 0000000000000000000000000000001 |
5 | 1 | 0000000000000000000000000000101 (5) |
JavaScript ビット単位のXOR(^)
ビット単位のXORは、ビットが異なる場合に1を返します。
2進数 | 10進数 |
---|---|
5 | 0000000000000000000000000000101 |
1 | 0000000000000000000000000000001 |
5^1 | 0000000000000000000000000000100 (4) |
JavaScript ビットワイズNOT(~)
2進数 | 10進数 |
---|---|
5 | 0000000000000000000000000000101 |
~5 | 111111111111111111111111111010 (-6) |
JavaScript (ゼロ フィル)ビット単位の左シフト(<<)
これは、ゼロ フィルの左シフトです。 1つまたは複数のゼロ ビットが右から押し込まれ、左端のビットが落ちます。
2進数 | 10進数 |
---|---|
5 | 0000000000000000000000000000101 |
5 << 1 | 0000000000000000000000000001010 (10) |
JavaScript(符号保持)ビットごとの右シフト(>>)
これは右シフトを維持する符号です。左端のビットのコピーが左から押し込まれ、右端のビットが落ちます。
10進数 | 2進数 |
---|---|
-5 | 111111111111111111111111111011 |
-5 >> 1 | 111111111111111111111111111101 (-3) |
JavaScript(ゼロ フィル)右シフト(>>>)
これは、ゼロ フィルの右シフトです。1つまたは複数のゼロ ビットが左から挿入され、右端のビットが削除されます。
10進数 | 2進数 |
---|---|
5 | 0000000000000000000000000000101 |
5 >>> 1 | 0000000000000000000000000000010 (2) |
二進数
ビットセットが1つだけの2進数は理解しやすいです。
2進数表現 | 10進値 |
---|---|
0000000000000000000000000000001 | 1 |
0000000000000000000000000000010 | 2 |
00000000000000000000000000000100 | 4 |
0000000000000000000000000001000 | 8 |
0000000000000000000000000010000 | 16 |
0000000000000000000000000100000 | 32 |
00000000000000000000000001000000 | 64 |
さらに数ビットを設定すると、バイナリ パターンが明らかになります。
2進数表現 | 10進値 |
---|---|
0000000000000000000000000000101 | 5(4+1) |
0000000000000000000000000001101 | 13(8+4+1) |
0000000000000000000000000101101 | 45(32+8+4+1) |
JavaScriptの2進数は、2の補数形式で格納されます。
これは、負の数は、数に1を加えたビット単位のNOTであることを意味します。
2進数表現 | 10 進値 |
---|---|
0000000000000000000000000000101 | 5 |
111111111111111111111111111011 | -5 |
0000000000000000000000000000110 | 6 |
111111111111111111111111111010 | -6 |
0000000000000000000000000101000 | 40 |
1111111111111111111111111011000 | -40 |
10進数から2進数への変換
2進数から10進数への変換
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。