IT用語集

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

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

UnsplashLidia Nemiroffが撮影した写真

排他的論理和(XOR)は、2つの条件のうち片方だけが真のときに真を返す論理演算です。ORと似ていますが、両方が真のときは真にしない点が異なります。この性質は、パリティチェック、差分抽出、ビット演算、条件分岐などで役立ちます。ここでは、基本の考え方から真理値表、代表的な使いどころ、実装のしかたまでを順に見ていきます。

排他的論理和とは

排他的論理和とは、論理演算の一種で、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との決定的な違いです。

排他的論理和の応用例

排他的論理和が実際に使われるのは、「2つが違っているときだけ反応する」「一致していない部分だけを取り出す」といった性質があるためです。この性質を活かして、誤り検出、マスク処理、差分抽出などで使われます。

パリティチェック

パリティチェックは、データ転送時の誤り検出に使われる基本的な仕組みです。データ列に対してXORでパリティを計算し、受信側でも同様に計算して一致するかを確認します。単純ですが、奇数個のビット誤りを検出できるため、特に1ビット誤りの検出でよく使われます。一方で、偶数個の誤りは見逃すことがあります。

暗号化やマスク処理

XORは「同じ値で2回XORすると元に戻る」という性質があります。このため、暗号の構成要素(例:ストリーム暗号におけるマスク処理)、ログのマスキング、簡易的なチェック処理などで使われます。ただし、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とも呼ばれ、「違っているときだけ反応する」性質を活かして、パリティチェック、差分抽出、ビット演算、暗号の構成要素など幅広い場面で使われます。ORと混同しやすいものの、両方が真なら偽になる点を押さえておくと整理しやすくなります。実装では、ビット演算と論理演算の違いを意識しておくと、意図しない書き間違いを減らしやすくなります。


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が話題になるのはなぜですか?

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

記事を書いた人

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