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

C++のビット単位XOR(排他的論理和)とは?仕組みと使い方を解説

ビット単位の排他的論理和(XOR)演算子「^」は、第1オペランドの各ビットと、第2オペランドの対応するビットを1つずつ比較する演算子です。比較した2つのビットが異なる値(片方が0でもう片方が1)であれば、結果の該当ビットは「1」にセットされます。逆に、両方のビットが同じ値(どちらも0、またはどちらも1)であれば、結果の該当ビットは「0」にセットされます。

この演算子を使う際は、両方のオペランドが整数型(int型、unsigned short型など)である必要がある点に注意してください。浮動小数点型の値には適用できません。

XORの真理値表

ビットごとの演算結果は、次の真理値表のようにまとめられます。

ビットAビットBA ^ B
000
011
101
110

サンプルコード

以下は、16進数リテラルを使ってunsigned short型の変数同士でXOR演算を行う例です。

#include <iostream>
using namespace std;

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

出力結果

このプログラムを実行すると、次の出力が得られます。

aaaa

出力された「aaaa」は、2進数で表すと「1010...」というパターンに相当します。

動作の仕組みを詳しく見てみましょう。0x5555は「0101」を繰り返すビットパターン、0xFFFFはすべてのビットが「1」のパターンです。XORでは相手のビットと異なる場合に結果が「1」になるため、0xFFFFとの演算によって0x5555の全ビットが反転し、「1010」を繰り返す0xAAAA(表示上はaaaa)となります。

この性質を利用すると、特定のビットだけを反転させるマスク処理や、フラグのオン・オフ切り替えなどが簡単に実装できます。ビット単位XORは、C++の低レベルなデータ操作において非常に便利な基本演算の一つです。

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

    C++で利用できるビット演算子(ビットごとの演算を行う演算子)には主に3種類あります。ビットごとのAND演算子(&)、ビットごとのOR演算子(|)、そしてビットごとの排他的OR演算子であるXOR(^)です。これらの演算子は、データを2進数のビット列として扱い、対応するビット同士を比較することで新しい値を生成します。フラグ管理やマスク処理など、低レベルなプログラミングで頻繁に活用される重要な演算子です。ビットごとのAND演算子(&)AND演算子(&)は、第1オペランドの各ビットを、第2オペランドの対応するビットと比較します。両方のビットが1の場合のみ、結果の対応するビット

  2. Linux向けC++開発に最適なIDEのおすすめ6選

    大規模なプロジェクトをテキストエディタだけで管理するのは容易ではありません。そうしたケースではIDE(統合開発環境)を活用することで、生産性が向上し、フラストレーションも大幅に軽減されるでしょう。IDEにはさまざまな種類があり、自分のニーズに合ったものを選ぶことが重要です。「Linux上のC++開発において唯一のベスト」と呼べるIDEは存在せず、賢くツールを見極める必要があります。ここでは、人気が高く、編集部のおすすめでもあるLinux向けIDEを紹介します。Linuxで使えるC++向けIDE おすすめ6選1. NetBeansNetBeansは、C/C++をはじめ多くのプログラミング言語に対