JavaScript ビット演算
JavaScript ビット演算子
演算子 |
説明 |
例 |
同左 |
結果 |
同左 |
& |
論理積(AND) |
5 & 1 |
0101 & 0001 |
1 |
0001 |
| |
論理和(OR) |
5 | 1 |
0101 | 0001 |
5 |
0101 |
~ |
論理否定(NOT) |
~ 5 |
~0101 |
10 |
1010 |
^ |
排他的論理和(XOR) |
5 ^ 1 |
0101 ^ 0001 |
4 |
0100 |
<< |
ゼロ埋め左シフト |
5 << 1 |
0101 << 1 |
10 |
1010 |
>> |
符号維持右シフト |
5 >> 1 |
0101 >> 1 |
2 |
0010 |
>>> |
ゼロ埋め右シフト |
5 >>> 1 |
0101 >>> 1 |
2 |
0010 |
上の例では、4ビットの符号なしの例を使用しています。 しかし、JavaScript では32ビットの符号付き数値が使用されます。
このため、JavaScript では、~ 5 は 10 を返すのではなく -6 を返します。
~00000000000000000000000000000101 は 11111111111111111111111111111010 を返します
ビット演算 AND(論理積)
1 組のビットに対してビット演算の AND を実行すると、両方のビットが1の場合は1が返されます。
1 ビットの例:
演算 | 結果 |
0 & 0 | 0 |
0 & 1 | 0 |
1 & 0 | 0 |
1 & 1 | 1 |
4 ビットの例:
演算 | 結果 |
1111 & 0000 | 0000 |
1111 & 0001 | 0001 |
1111 & 0010 | 0010 |
1111 & 0100 | 0100 |
ビット演算 OR(論理和)
1 組のビットに対してビット演算の OR を実行すると、どちらかのビットが1の場合は1が返されます:
1 ビットの例:
演算 | 結果 |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
4 ビットの例:
演算 | 結果 |
1111 | 0000 | 1111 |
1111 | 0001 | 1111 |
1111 | 0010 | 1111 |
1111 | 0100 | 1111 |
ビット演算 XOR(排他論理和)
1 組のビットに対してビット演算の XOR を実行すると、ビットが異なる場合には1が返されます:
1 ビットの例:
演算 | 結果 |
0 ^ 0 | 0 |
0 ^ 1 | 1 |
1 ^ 0 | 1 |
1 ^ 1 | 0 |
4 ビットの例:
演算 | 結果 |
1111 ^ 0000 | 1111 |
1111 ^ 0001 | 1110 |
1111 ^ 0010 | 1101 |
1111 ^ 0100 | 1011 |
JavaScript ビット演算
JavaScript のビット演算は32ビット符号付き整数で動作します。
ビット演算では、全ての数値は32ビット符号付き整数に変換されます。
ビット演算の結果は、JavaScript の数値に変換されます。
JavaScript ビット演算 AND (&)
ビット演算 AND は、両方のビットが1の場合のみ1を返します:
10進数 | バイナリ |
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 & 1 | 00000000000000000000000000000001 (1) |
JavaScript ビット演算 OR (|)
ビット演算 OR は、どちらか一方のビットが1の場合に1を返します:
10進数 | バイナリ |
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 | 1 | 00000000000000000000000000000101 (5) |
JavaScript ビット演算 XOR (^)
ビット演算 XOR は、双方のビットが異なる場合に1を返します:
10進数 | バイナリ |
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 ^ 1 | 00000000000000000000000000000100 (4) |
JavaScript ビット演算 NOT (~)
10進数 | バイナリ |
5 | 00000000000000000000000000000101 |
~5 | 11111111111111111111111111111010 (-6) |
JavaScript (ゼロ埋め) ビット演算左シフト (<<)
これはゼロ埋めの左シフトです。 1つ以上のゼロが右から埋められ、左端のビットから切捨てられます:
10進数 | バイナリ |
5 | 00000000000000000000000000000101 |
5 << 1 | 00000000000000000000000000001010 (10) |
JavaScript (符号維持) ビット演算右シフト (>>)
これはサインを維持する右シフトです。左端のビットのコピーを左から埋め込んで、右端のビットが切り捨てられます:
10進数 | バイナリ |
-5 | 11111111111111111111111111111011 |
-5 >> 1 | 11111111111111111111111111111101 (-3) |
JavaScript (ゼロ埋め) 右シフト (>>>)
これはゼロ埋めの右シフトです。 1つ以上のゼロビットが左から埋められ、右端のビットが切り捨てられます:
10進数 | バイナリ |
5 | 00000000000000000000000000000101 |
5 >>> 1 | 00000000000000000000000000000010 (2) |
32ビット符号付き整数
1 ビットのみが設定されている32ビット整数を理解するのは簡単です:
バイナリ表現 | 10進数値 |
00000000000000000000000000000001 | 1 |
00000000000000000000000000000010 | 2 |
00000000000000000000000000000100 | 4 |
00000000000000000000000000001000 | 8 |
00000000000000000000000000010000 | 16 |
00000000000000000000000000100000 | 32 |
00000000000000000000000001000000 | 64 |
さらにいくつかのビットを設定することによりバイナリのパターンが明らかになります:
バイナリ表現 | 10進数値 |
00000000000000000000000000000101 | 5 (4 + 1) |
00000000000000000000000000101000 | 40 (32 + 8) |
00000000000000000000000000101101 | 45 (32 + 8 + 4 + 1) |
負の数値は、2 つの補数フォーマットで格納されます。
これは、負の数は、数値に1を加えたビット演算の NOT であることを意味します。
バイナリ表現 | 10進数値 |
00000000000000000000000000000101 | 5 |
11111111111111111111111111111011 | -5 |
00000000000000000000000000101000 | 40 |
11111111111111111111111111011000 | -40 |
10進から2進への変換
2審から10進への変換