C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のビット演算子(AND・OR・XOR)の使い方を解説

C++で利用できるビット演算子(ビットごとの演算を行う演算子)には主に3種類あります。ビットごとのAND演算子(&)、ビットごとのOR演算子(|)、そしてビットごとの排他的OR演算子であるXOR(^)です。

これらの演算子は、データを2進数のビット列として扱い、対応するビット同士を比較することで新しい値を生成します。フラグ管理やマスク処理など、低レベルなプログラミングで頻繁に活用される重要な演算子です。

ビットごとのAND演算子(&)

AND演算子(&)は、第1オペランドの各ビットを、第2オペランドの対応するビットと比較します。両方のビットが1の場合のみ、結果の対応するビットが1に設定され、それ以外の場合は0になります。

なお、この演算子の両方のオペランドは整数型である必要があります。

コード例

#include <iostream>
using namespace std;

int main() {
    unsigned short a = 0x5555;   // パターン 0101 ...
    unsigned short b = 0xAAAA;   // パターン 1010 ...
    cout << hex << (a & b) << endl;
}

実行結果

0

この例では、aの各ビットとbの対応するビットが必ず互いに異なる(0101と1010)ため、一致して1になるビットが存在せず、結果は0となります。

ビットごとのOR演算子(|)

OR演算子(|)は、第1オペランドの各ビットを、第2オペランドの対応するビットと比較します。どちらか一方でもビットが1であれば、結果の対応するビットは1に設定され、両方が0の場合のみ0になります。

こちらも両方のオペランドは整数型である必要があります。

コード例

#include <iostream>
using namespace std;

int main() {
    unsigned short a = 0x5555;   // パターン 0101 ...
    unsigned short b = 0xAAAA;   // パターン 1010 ...
    cout << hex << (a | b) << endl;
}

実行結果

ffff

この場合、各ビット位置において必ずどちらかが1になっているため、すべてのビットが1となり、結果はffff(16進数表記)になります。

ビットごとのXOR演算子(^)

排他的OR演算子(^)は、第1オペランドの各ビットを、第2オペランドの対応するビットと比較します。片方のビットだけが1で、もう片方が0の場合に、結果の対応するビットは1に設定されます。両方のビットが同じ値(ともに0またはともに1)の場合は0になります。

この演算子についても、両方のオペランドは整数型である必要があります。

コード例

#include <iostream>
using namespace std;

int main() {
    short a = 0x5555;            // パターン 0101 ...
    unsigned short b = 0xFFFF;   // パターン 1111 ...
    cout << hex << (a ^ b) << endl;
}

実行結果

aaaa

この結果aaaaは、2進数で「1010...」というパターンを表しています。すべてのビットが1の値(0xFFFF)とXORを取ると、元の値の各ビットが反転されることが確認できます。この性質を利用すると、ビットの反転や値の入れ替え(スワップ)などのテクニックを実現できます。

  1. C#のビット演算子とシフト演算子の使い方を徹底解説

    ビット演算子(Bitwise Operator)は、数値を2進数のビット列として扱い、1ビット単位で演算を行うための演算子です。フラグ管理や高速な計算処理など、パフォーマンスが求められる場面で活用されます。C#で使える主なビット演算子以下の表は、C#でサポートされているビット演算子の一覧です。ここでは、変数Aに60(2進数:0011 1100)、変数Bに13(2進数:0000 1101)が格納されているものとして説明します。演算子説明使用例&ビット単位のAND演算子。両方のオペランドで対応するビットが1の場合のみ、結果にそのビットをコピーします。(A & B) = 12(000

  2. Pythonのビット演算子とは?種類と使い方を実例付きでわかりやすく解説

    Pythonのビット演算子とはビット演算子は、数値を2進数のビット列として扱い、ビット単位で計算を行う演算子です。Pythonでは主に6種類のビット演算子が用意されており、フラグ管理やマスク処理など低レベルなデータ操作で活躍します。ここでは、次の2つの変数を例に各演算子の動作を見ていきます。a = 60 → 0011 1100 b = 13 → 0000 1101これらの変数に対して基本のビット演算を行うと、結果は以下のようになります。a & b = 0000 1100 a | b = 0011 1101 a ^ b = 0011 0001 ~a   =