logo

C++ のビット演算子

C++ にはさまざまな演算子が存在します。すべてのオペレーターには、特定のシンボルと実行する操作があります。 C++ にはさまざまなカテゴリの演算子があります。

  1. 算術演算子
  2. 関係演算子
  3. 論理演算子
  4. 代入演算子
  5. ビット演算子

この記事では、C++ のビット演算子について学びます。



C++ ビット演算子

ビット単位の演算子は、整数のビット レベルで演算を実行するために使用される演算子です。この操作の実行中、整数は 2 進数のシーケンスとして考慮されます。 C++ には、さまざまな種類のビット演算子があります。

  1. ビット単位の AND (&)
  2. ビット単位の OR (|)
  3. ビットごとの XOR (^)
  4. ビット単位の NOT (~)
  5. 左シフト (<<)
  6. 右シフト (>>)

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、左シフト演算子、右シフト演算子など、さまざまな種類のビット演算子があります。この操作により、個々のビットの操作を非常に正確に行うことができ、これは低レベルのデータ処理では不可欠です。