IT用語集

排他的論理和とは? 10分でわかりやすく解説

水色の背景に六角形が2つあるイラスト 水色の背景に六角形が2つあるイラスト
アイキャッチ
目次

UnsplashLidia Nemiroffが撮影した写真      

この記事では、排他的論理和をわかりやすく解説します。基本の考え方から代表的な使いどころ、実装のしかたまで押さえることで、ロジックの見通しがよくなり、意図しないバグも減らしやすくなります。

排他的論理和とは

排他的論理和とは、論理演算の一種で、2つの条件のうちどちらか一方だけが真のときに真を返す演算です。英語ではeXclusive ORと呼ばれ、一般にXORと略されます。

論理演算の一種

論理演算とは、真偽(真または偽)を入力として受け取り、真偽を出力する演算の総称です。代表例として、次のようなものがあります。

  1. 論理積(AND)
  2. 論理和(OR)
  3. 否定(NOT)
  4. 排他的論理和(XOR)

XORとも呼ばれる

排他的論理和はXOR(eXclusive OR)とも呼ばれます。論理和(OR)が「少なくとも一方が真なら真」なのに対し、XORは同時に真になるケースを真にしない点が特徴です。

どちらか一方のみが真なら真を返す

排他的論理和の真理値表は次の通りです。

条件1条件2結果

片方だけが真のときだけ真と覚えると混乱しにくくなります。

両方が真や両方が偽のときは偽を返す

XORは、2つの条件が同じ値(真・真、偽・偽)なら偽になります。つまり「違っているかどうか」を判定する演算として見ると理解がスムーズです。

排他的論理和の真理値表

真偽を0/1で表すと、排他的論理和は次のように整理できます。

入力Aと入力Bの組み合わせによる出力

入力A入力B出力
000
011
101
110

A=0, B=0 のとき出力は0

両方が0(偽)なので、片方だけが真という条件を満たさず、出力は0になります。

A=0, B=1 のとき出力は1

AとBが異なる(片方だけが真)ので、出力は1になります。

A=1, B=0 のとき出力は1

この場合もAとBが異なるため、出力は1です。

A=1, B=1 のとき出力は0

両方が真になるケースは、XORでは真にしません。ここがORとの決定的な違いです。

排他的論理和の応用例

排他的論理和は「違いを取り出す」「一致しないときだけ反応する」といった性質を活かして、さまざまな場面で使われます。

パリティチェック

パリティチェックは、データ転送時の誤り検出に使われる基本的な仕組みです。データ列に対してXORでパリティを計算し、受信側でも同様に計算して一致するかを確認します。単純ですが、1ビット誤りの検出などで役立ちます。

暗号化やマスク処理

XORは「同じ鍵で2回かけると元に戻る」という性質があります。このため、暗号の構成要素(ストリーム暗号の基本形)や、ログのマスキング、チェック用途の簡易的な加工などで使われます。ただし、XORだけで安全な暗号になるわけではないため、設計は必ず暗号の前提知識に沿って行う必要があります。

差分抽出

ビット列や画像などを「同じ形式のデータ」として扱える場合、XORは差分抽出に使えます。たとえば2つのビットマップをXORすると、一致していない部分だけが残る形になり、比較や検出の前処理として便利です。

機械学習でのXOR問題

ニューラルネットワークの文脈では、「XORを正しく分類できるか」は定番の題材です。これは、単純な線形分類器ではXORが解けないためで、多層化や非線形性の必要性を説明する例としてよく登場します。なお、XORが「活性化関数」として使われる、という説明は一般的ではありません。

排他的論理和の実装方法

XORはソフトウェアでもハードウェアでも基本演算として扱われます。用途に応じて、実装の形を選べるのも利点です。

プログラミング言語での実装

多くの言語ではXOR演算子が用意されています。注意点として、演算対象が「ビット列」なのか「真偽値」なのかで意味が変わる場合があります。

  • C言語:^ はビット単位XOR(整数向け)
  • Java:^ は整数ではビットXOR、booleanでは論理XOR
  • Python:^ はビットXOR(整数・boolでも利用可)。bool同士の「論理としてのXOR」は != でも表現できます

例として、C言語のビットXORは次の通りです。


int a = 1;
int b = 0;
int result = a ^ b; // ビット単位のXOR

ブールの条件同士で「どちらか一方だけ」を表したい場合は、言語仕様に合わせて書き分けると安全です。

ハードウェアでの実装

XORは回路として実装しやすく、CPUや各種デバイスにはXORを実行するための回路や命令が用意されています。ビット演算としてのXORは用途が広いため、高速に処理できる基本要素として扱われます。

論理ゲートを用いた回路設計

XORは、AND、OR、NOTを組み合わせて表現できます。代表的な形は次の通りです。


A XOR B = (A AND (NOT B)) OR ((NOT A) AND B)

「片方だけが真」という定義が、そのまま式になっていると捉えると理解しやすくなります。

ルックアップテーブルでの実現

入力の組み合わせが少ない場合は、真理値表をそのままルックアップテーブルとして実装する方法もあります。組み込みや高速化の文脈では、分岐を減らしたいときの選択肢になります。

まとめ

排他的論理和は、2つの条件のうち片方だけが真のときに真を返す論理演算です。XORとも呼ばれ、「違っているときだけ反応する」性質を活かして、パリティチェック、差分抽出、ビット演算、暗号の構成要素など幅広い場面で使われます。実装は演算子で簡単に書ける一方、ビット演算と論理演算の違いを意識すると、読みやすさと安全性が上がります。


Q.排他的論理和とは何ですか

2つの条件のうち、どちらか一方だけが真のときに真を返す論理演算です。

Q.XORとORは何が違いますか

ORは少なくとも一方が真なら真ですが、XORは両方が真のケースを真にしません。

Q.XORはどう覚えると混乱しませんか

「2つが違っているときだけ真」と覚えると、真理値表と対応づけやすくなります。

Q.XORはどんな場面で使われますか

パリティチェック、差分抽出、ビットマスク処理、暗号の構成要素などで使われます。

Q.パリティチェックでXORを使う理由は何ですか

ビット列の整合性を簡単に計算でき、1ビット誤りの検出などに役立つためです。

Q.XORだけで安全な暗号になりますか

なりません。XORは暗号の部品としては有用ですが、鍵管理や方式設計が不十分だと安全性は確保できません。

Q.プログラミングでXORはどう書きますか

多くの言語で ^ が使えます。整数のビットXORなのか、真偽値の論理XORなのかは言語仕様で確認すると安全です。

Q.Pythonの != はXORですか

bool同士では「異なるならTrue」になるため、論理としてのXOR表現として使えます。整数などでは意味が異なるため注意が必要です。

Q.論理ゲートでXORは作れますか

作れます。AND、OR、NOTを組み合わせて (A AND NOT B) OR (NOT A AND B) の形で実現できます。

Q.機械学習でXORが話題になるのはなぜですか

単純な線形分類では解けないため、多層化や非線形性の重要性を説明する定番例として使われるからです。

記事を書いた人

ソリトンシステムズ・マーケティングチーム