C++ にはさまざまな演算子が存在します。すべてのオペレーターには、特定のシンボルと実行する操作があります。 C++ にはさまざまなカテゴリの演算子があります。
- 算術演算子
- 関係演算子
- 論理演算子
- 代入演算子
- ビット演算子
この記事では、C++ のビット演算子について学びます。
C++ ビット演算子
ビット単位の演算子は、整数のビット レベルで演算を実行するために使用される演算子です。この操作の実行中、整数は 2 進数のシーケンスとして考慮されます。 C++ には、さまざまな種類のビット演算子があります。
- ビット単位の AND (&)
- ビット単位の OR (|)
- ビットごとの XOR (^)
- ビット単位の NOT (~)
- 左シフト (<<)
- 右シフト (>>)
1. ビット単位の AND (&)
ビット単位の AND 演算は 2 つの整数間で実行され、同じ位置の各ビットを比較し、対応する両方のビットがセット (1) されている場合にのみ、結果のビットがセット (1) されます。ビット単位の AND 演算を実行するために使用される記号は & です。
例 : 2 つの数値 7 と 4 の間でビット単位の演算を実行します。バイナリでは、7 は 111 として表され、4 は 100 として表されます。
1 1 1 & 1 0 0 ------ 1 0 0>
上記の例でわかるように、それらのビットのみが、対応するビット (両方) が設定されている設定ビットです。したがって、7&4=4
2. ビット単位の OR (|)
2 つの整数間でビットごとの OR 演算が実行される場合、同じ位置の各ビットを比較し、対応するビットのいずれかが set(1) であれば、結果のビットも set(1) になります。ビットごとの OR 演算を実行するために使用される記号は | です。
例: 2 つの数値 7 と 4 の間でビット単位の OR 演算を実行します。2 進数では、7 は 111 として表され、4 は 100 として表されます。
1 1 1 | 1 0 0 ------ 1 1 1>
上の例でわかるように、これらのビットは、少なくともいずれか 1 つの対応するビットが設定されている設定ビットです。したがって、7|4=7 となります。
3. ビットごとの XOR (^)
2 つの整数間でビットごとの XOR 演算が実行される場合、同じ位置の各ビットを比較し、対応するビットのいずれかが異なる場合、つまり、一方が 1 で他方がゼロである必要がある場合、結果のビットは set(1) になります。ビット単位の XOR 演算を実行するために使用される記号は ^ です。
例: 2 つの数値 7 と 4 の間でビット単位の XOR 演算を実行します。バイナリでは 7 は 111 として表され、4 は 100 として表されます。
1 1 1 ^ 1 0 0 ------ 0 1 1>
上の例でわかるように、これらのビットは、対応するビットが異なる設定ビットです。したがって、7^4=3となります。
4.ビット単位の NOT (~)
ビット単位の NOT 演算は、単一の数値に対して実行されます。現在のビットをその補数に変更します。つまり、現在のビットが 0 の場合は結果的に 1 になり、現在のビットが 1 の場合は 0 になります。これは記号 ~ で示されます。
例: 数値 4 に対してビット単位の NOT 演算を実行します。数値 4 は 2 進数で 100 として表されます。
~ 1 0 0 ------ 0 1 1>
結果からわかるように、初期値が 1 だったビットは結果では 0 になり、その逆も同様です。したがって、数値 4 のビット単位の NOT は 3 になります。
5.左シフト(<<)
この演算子は、Integer のビットを特定の数だけ左側にシフトします (前述のとおり)。この左シフト演算は、シフトされた位置の 2 乗を整数に乗算することと同じです。左シフト演算子を表すために使用される記号は << です。
例: 整数 5 があると考えて、そのビットを 2 位置左にシフトします。演算は x << 2 として表されます。
数字の 5 は、2 進数では 101 として表されます。ビットを左シフトするために、先頭にいくつかのゼロを追加します。したがって、 00000101 と表されます。 次に、すべてのビットを 2 つ左に移動し、空の位置を 0 で埋めます。 したがって、 00010100、つまり 20 になります。前述したように、数値を 2 ビット左シフトすることは、数値に 2 を乗算して 2 (つまり 4) にすることを意味します。 5*4 = 20 は上記のステートメントを示します。
6.右シフト(>>)
この演算子は、Integer のビットを特定の数だけ右側にシフトします (前述のとおり)。この右シフト演算は、シフトされた位置の 2 乗で整数を除算することと同等です。左シフト演算子を表すために使用される記号は>> です。
例: 整数 16 があるとします。そのビットを 2 位置右にシフトします。演算は x>> 2 と表されます。
16 という数字は 2 進数で 10000 として表されます。ビットを右シフトするために、先頭にいくつかのゼロを追加します。したがって、これは 00010000 と表されます。次に、すべてのビットを 2 つ右に移動し、空の位置を 0 で埋めます。したがって、00000100、つまり 4 になります。前に述べたように、数値を 2 ビット右シフトすることは、数値を 2 で割って 2、つまり 4 になることを意味します。 16*4 = 4 は上記のステートメントを示します。
C++ プログラムのビット演算子
以下はトピックの実装です。
C++ // C++ Program to demonstrate // Bitwise Operator #include using namespace std; // Main function int main() b; // Bitwise XOR int bitwise_xor = a ^ b; // Bitwise NOT int bitwise_not = ~a; // Bitwise Left Shift int left_shift = a << 2; // Bitwise Right Shift int right_shift = a>> 1; // ビット単位の演算子 cout の結果を出力する<< 'AND: ' << bitwise_and << endl; cout << 'OR: ' << bitwise_or << endl; cout << 'XOR: ' << bitwise_xor << endl; cout << 'NOT a: ' << bitwise_not << endl; cout << 'Left Shift: ' << left_shift << endl; cout << 'Right Shift: ' << right_shift << endl; return 0;>
出力:
AND: 1 OR: 7 XOR: 6 NOT a: -6 Left Shift: 20 Right Shift: 2>
結論
結論として、ビットごとの演算子はバイナリ (ビット) レベルで演算を実行するために使用されます。 C++ には、AND、OR、XOR、NOT、左シフト演算子、右シフト演算子など、さまざまな種類のビット演算子があります。この操作により、個々のビットの操作を非常に正確に行うことができ、これは低レベルのデータ処理では不可欠です。