(Translated by https://www.hiragana.jp/)
排他的論理和 - Wikipedia コンテンツにスキップ

排他はいたてき論理ろんり

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
ベン図べんずによる排他はいたてき論理ろんり

排他はいたてき論理ろんり(はいたてきろんりわ、えい: exclusive or / exclusive disjunction)とは、ブール論理ろんり古典こてん論理ろんりビット演算えんざんなどにおいて、2つの入力にゅうりょくのどちらか片方かたがたしんでもう片方かたがたにせときには結果けっかしんとなり、両方りょうほうともしんあるいは両方りょうほうともにせときにせとなる演算えんざん論理ろんり演算えんざん)である。XOREOREX-OR(エクスオア、エックスオア、エクソア)などと略称りゃくしょうされる。

表記ひょうきほう

[編集へんしゅう]

中置ちゅうち演算えんざんのある体系たいけいでは、中置ちゅうち演算えんざん利用りようした中置ちゅうち記法きほうにより表記ひょうきされることがおおい。演算えんざん (Unicode: U+22BB ⊻)、誤解ごかいのおそれがないときは、XOR、xor、 (Unicode: U+2295 ⊕)、+ なども使つかわれる。

論理ろんりがくなどでは 使用しようして くことがおおく、論理ろんり回路かいろなどでは 使用しようして くことがおおい。

プログラミング言語げんご

[編集へんしゅう]

記号きごう使つかった中置ちゅうち演算えんざんとしては ^@ などが使つかわれることがおおく、キーワードが演算えんざんになるような言語げんごでは XORxor などが使つかわれることがおおい。

z = x ^ y;
z = x xor y;

わたし身長しんちょうは160cm以上いじょうである」と「わたし体重たいじゅうは52kg未満みまんである」のふたつの命題めいだい排他はいたてき論理ろんりは、これらのうち一方いっぽうのみがつことであるから、「わたし身長しんちょう160cm以上いじょうであり体重たいじゅうが52kg以上いじょうである。あるいは、わたし身長しんちょう160cm未満みまんであり体重たいじゅうが52kg未満みまんである。」となる。

なお、2つの命題めいだい A, B について共通きょうつう部分ぶぶん ABそら集合しゅうごうであれば、排他はいたてき論理ろんり論理ろんりおなじになる。たとえば A = 「わたし身長しんちょうは160cmである」と B = 「わたし身長しんちょうは170cmである」は同時どうじ成立せいりつすることはない(共通きょうつう部分ぶぶんそらである)ので、(A xor B) は (AB) とおなじく「わたし身長しんちょうは160cmまたは170cmのいずれか一方いっぽうである」となる。

性質せいしつ

[編集へんしゅう]

排他はいたてき論理ろんりは、論理ろんり論理ろんりせき否定ひていもちいて、

などとあらわすことができる。

真理しんりひょう
命題めいだい P 命題めいだい Q P ⊻ Q
しん しん にせ
しん にせ しん
にせ しん しん
にせ にせ にせ

2をほうとする剰余じょうよたい での加算かさん(このからだでは加算かさん減算げんざんひとしい)は、0 をにせ、1 をしんとみなすと、排他はいたてき論理ろんりとなる。つまり、偶数ぐうすう (0, にせ) どうしまたは奇数きすう (1, しん) どうしをくわえると偶数ぐうすう (0, にせ) になり、偶数ぐうすう (0, にせ) と奇数きすう (1, しん) をくわえると奇数きすう (1, しん) になる。

ビットごとの排他はいたてき論理ろんり

[編集へんしゅう]

2進数しんすう表現ひょうげんした数値すうちかくビットたいし、0 をにせ、1 をしんとみなして排他はいたてき論理ろんりもとめた結果けっかを、ビットごとの排他はいたてき論理ろんり排他はいたてきビット、またはたん排他はいたてき論理ろんりぶ。

0 1
0 0 1
1 1 0
      P = 0011
      K = 0110
  PK = 0101

ビットごとの排他はいたてき論理ろんりは、けたがり無視むしした2進数しんすう加算かさん結果けっかひとしい。つまり、ビットごとの排他はいたてき論理ろんりは、2 のべきすうとする有限ゆうげんたい での加減算かげんざん(このからだでは加算かさん減算げんざんひとしい)にひとしい。(なお、2をほうとする剰余じょうよたい は、くらいすう2の有限ゆうげんたい である。)

1 けたの2進数しんすう排他はいたてき論理ろんりは、はん加算かさん一部いちぶである。

排他はいたてき論理ろんりとビットごとの排他はいたてき論理ろんりとは、ことなることがある。0(にせ)と 1(しん)については、排他はいたてき論理ろんりとビットごとの排他はいたてき論理ろんりひとしい。しかし、0 でないすべしんとみなされる環境かんきょうや、0 でないしん (1) に暗黙あんもくかた変換へんかんされる環境かんきょうでは、0 と 1 以外いがいたいしても(ビットごとでない)排他はいたてき論理ろんりもとめることができ、結果けっか一般いっぱんにはビットごとの排他はいたてき論理ろんりとはことなるので注意ちゅうい必要ひつようである。

ビット演算えんざん

[編集へんしゅう]

ビットごとの排他はいたてき論理ろんりは、コンピュータじょうビット演算えんざんおこなっている場合ばあいに、特定とくていのビットだけを反転はんてんさせるのによくもちいられる。ある数値すうちと、その数値すうちのビットを反転はんてんさせたい部分ぶぶんを 1 にした数値すうちとの排他はいたてき論理ろんりをとると、指定していした部分ぶぶん反転はんてんした数値すうちられる:

おおくのプロセッサで、レジスタをゼロにする場合ばあいに、直接ちょくせつゼロをレジスタへ転送てんそうするより、自分じぶん自身じしんとのXORをとってゼロとするほうが有利ゆうり場合ばあいがある。

おも以下いか条件じょうけん成立せいりつする場合ばあい言語げんご処理しょりけい最適さいてき一環いっかんとしてXORをもちいる。

  • 即値そくちのゼロを省略しょうりゃくすることにより、コードサイズが削減さくげんできる。
  • 処理しょりがレジスタとALUのみで完結かんけつするので、サイクルすう消費しょうひ電力でんりょく削減さくげんできる。
  • XOR演算えんざんによるフラグ変化へんかがその処理しょり不利ふり影響えいきょうのこさない。

ビットごとの排他はいたてき論理ろんりによって、多数たすう入力にゅうりょくにおけるにせ個数こすう奇数きすう偶数ぐうすうパリティ)が検出けんしゅつできるので、あやま検出けんしゅつもちいられる。この目的もくてき排他はいたてき論理ろんり論理ろんりゲート)をえだじょう接続せつぞくした回路かいろをパリティツリーという。

ビットごとの排他はいたてき論理ろんり特定とくていビットの反転はんてん操作そうさなので、2かいかえせばもともどる。つまり

これは、結合けつごう法則ほうそくによって、つぎのとおりに証明しょうめいできる。

この性質せいしつ便利べんりであって、さまざまな応用おうようがある。単純たんじゅんなものでは、(現代げんだいでは有用ゆうようせいはほとんどないが)2のレジスタの内容ないよう資源しげん使つかわず交換こうかんできる「XOR交換こうかんアルゴリズム」があり、データ構造こうぞうでは「XOR連結れんけつリスト」がある。

暗号あんごう

[編集へんしゅう]

かぎとする暗号あんごう使つかうこともできる。平文へいぶん とすると、暗号あんごうぶんとすることができる。

さきれいでいえば、平文へいぶん かぎ 使つかって暗号あんごうぶん 変換へんかんされ、つぎのとおり同一どういつかぎ使つかって暗号あんごうぶんから平文へいぶん復号ふくごうできる。

バーナム暗号あんごうは、この性質せいしつ利用りようした暗号あんごうである。一般いっぱんかぎ交換こうかん問題もんだいがあることから、みじかかぎもとにしたなんらかの数列すうれつ使つかうこともおおいが、ワンタイムパッドによるバーナム暗号あんごうには原文げんぶんおなながさのかぎ(そのような大量たいりょう情報じょうほうりょうをもつものは、もはや運用うんようじょうは「かぎ」とはいえないが)が必要ひつようである。解読かいどく絶対ぜったい不可能ふかのう理論りろんてきに、どのような解読かいどく結果けっか同様どうようたしからしいものになってしまう)という意味いみでは最強さいきょう暗号あんごうであるが、暗号あんごう利用りよう運用うんようめんふくめて総合そうごうてき判断はんだんしなければならないものであり、かぎ事前じぜん共有きょうゆうとその秘匿ひとく必要ひつよう多大ただいなコストがおおきな難点なんてんである。

その

[編集へんしゅう]

排他はいたてき論理ろんりと2進数しんすう表記ひょうきもちいて、みっ山崩やまくずれし(ニム)の必勝ひっしょうほうみちびくことができる。

関連かんれん項目こうもく

[編集へんしゅう]