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進数への変換
例
function dec2bin(dec){
return (dec >>> 0).toString(2);
}
2進数から10進数への変換
例
function bin2dec(bin){
return parseInt(bin, 2).toString(10);
}