JavaScript ビット演算子
- 前のページ JS デストラクチャ
- 次のページ JS 正規表現
JavaScript ビット演算子
演算子 | 名前 | 説明 |
---|---|---|
& | AND | 2つのビットがどちらも1であれば、それぞれのビットを1に設定 |
| | OR | 2つのビットのうち1つが1であれば、それぞれのビットを1に設定 |
^ | XOR | 2つのビットが1であれば、それぞれのビットを1に設定 |
~ | NOT | 全てのビットを反転 |
<< | ゼロで左シフト | 右からゼロを挿入して左にシフトし、最左端のビットを脱着します。 |
>> | 符号付き右シフト | 最左端のコピーを挿入して右にシフトし、最右端のビットを脱着します。 |
>>> | ゼロで右シフト | 左からゼロを挿入して右にシフトし、最右端のビットを脱着します。 |
インスタンス
操作 | 結果 | 同等 | 結果 |
---|---|---|---|
5 & 1 | 1 | 0101 & 0001 | 0001 |
5 | 1 | 5 | 0101 | 0001 | 0101 |
5 ^ 1 | 4 | 0101 ^ 0001 | 0100 |
~ 5 | 10 | ~0101 | 1010 |
5 << 1 | 10 | 0101 << 1 | 1010 |
5 >> 1 | 2 | 0101 >> 1 | 0010 |
5 >>> 1 | 2 | 0101 >>> 1 | 0010 |
JavaScriptは32ビットのビット演算数を使用します
JavaScriptは64ビット浮動小数点数として数字を格納しますが、すべてのビット演算は32ビットの二進数で実行されます。
ビット演算を実行する前に、JavaScriptは数字を32ビット符号付き整数に変換します。
ビット演算を実行した後、結果は64ビットのJavaScript数に変換されます。
上記の例では4ビットの無符号の二進数を使用しています。したがって、~5は10を返します。
JavaScriptは32ビット符号付き整数を使用するため、-6を返します。
00000000000000000000000000000101 (5)
11111111111111111111111111111010 (~5 = -6)
符号付き整数は最左のビットを使用してマイナス記号としています。
ビット演算 AND
ビット演算 ANDを数位に対して行う場合、数位がすべて 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
ビット演算 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
ビット演算 XORを数位に対して行う場合、数位が異なる場合には 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のビット演算 AND (&)
もしビットがすべて 1 であれば、ビット演算 AND は 1 を返します:
十進数 | 二進数 |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 & 1 | 00000000000000000000000000000001 (1) |
インスタンス
var x = 5 & 1;
JavaScriptのビット演算 OR (|)
ビットの1つが1の場合、ビット演算 ORは1を返します:
十進数 | 二進数 |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 | 1 | 00000000000000000000000000000101 (5) |
インスタンス
var x = 5 | 1;
JavaScript ビット演算 XOR (^)
ビットが異なる場合、XORは1を返します:
十進数 | 二進数 |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 ^ 1 | 00000000000000000000000000000100 (4) |
インスタンス
var x = 5 ^ 1;
JavaScript ビット演算 NOT (~)
十進数 | 二進数 |
---|---|
5 | 00000000000000000000000000000101 |
~5 | 11111111111111111111111111111010 (-6) |
インスタンス
var x = ~5;
JavaScript(ゼロパディング)ビット演算左シフト(<<)
これはゼロパディングの左シフトです。1個または複数のゼロビットが右側に押し込まれ、最も左側のビットが削除されます:
十進数 | 二進数 |
---|---|
5 | 00000000000000000000000000000101 |
5 << 1 | 00000000000000000000000000001010 (10) |
インスタンス
var x = 5 << 1;
JavaScript(符号付き)ビット演算右シフト(>>)
これはシグネチャを保持する右シフトです。最も左側のビットが左側に押し込まれ、最も右側のビットが移動されます:
十進数 | 二進数 |
---|---|
-5 | 11111111111111111111111111111011 |
-5 >> 1 | 11111111111111111111111111111101 (-3) |
インスタンス
var x = -5 >> 1;
JavaScript(ゼロパディング)右シフト(>>>)
これはゼロパディングの右シフトです。1個または複数のゼロビットが左側に押し込まれ、最も右側のビットが移動されます:
十進数 | 二進数 |
---|---|
5 | 00000000000000000000000000000101 |
5 >>> 1 | 00000000000000000000000000000010 (2) |
インスタンス
var x = 5 >>> 1;
32ビット符号付き整数(二進数)
単一ビットの32ビット整数は非常に理解しやすいです:
二進数表現 | 十進数値 |
---|---|
00000000000000000000000000000001 | 1 |
00000000000000000000000000000010 | 2 |
00000000000000000000000000000100 | 4 |
00000000000000000000000000001000 | 8 |
00000000000000000000000000010000 | 16 |
00000000000000000000000000100000 | 32 |
00000000000000000000000001000000 | 64 |
数位を増やして二進数のパターンを明らかにします:
二進数表現 | 十進数値 |
---|---|
00000000000000000000000000000101 | 5 (4 + 1) |
00000000000000000000000000101000 | 40 (32 + 8) |
00000000000000000000000000101101 | 45 (32 + 8 + 4 + 1) |
負数は正数の二進数補码に 1 を加えます:
二進数表現 | 十進数値 |
---|---|
00000000000000000000000000000101 | 5 |
11111111111111111111111111111011 | -5 |
00000000000000000000000000101000 | 40 |
11111111111111111111111111011000 | -40 |
11111111111111111111111111011001 | -41 |
- 前のページ JS デストラクチャ
- 次のページ JS 正規表現