1. はじめに
排他的論理和、英語はexclusive OR、xorと略されます。
排他的論理和 (xor) は数学演算子です。論理演算で使用されます。XOR の数学記号は「⊕」、コンピューター記号は「xor」です。そのアルゴリズムは次のとおりです。
a⊕b = ( ∧ ∧ b ) ∨ ( a ∧ b )
2 つの値 a と b が同じでない場合、XOR の結果は 1 になります。a と b の値が同じ場合、XOR の結果は 0 になります。
XOR は半加算演算とも呼ばれ、その演算規則はキャリーのない 2 進数の加算と同じで、2 進数では 1 が真、0 が偽を表し、XOR の演算規則は 0⊕0=0, 1⊕0 となります。 = 1、0⊕1=1、1⊕1=0 (同じは 0、差は 1)、これらのルールは加算と同じですがキャリーがないため、XOR はキャリーなしの加算と見なされることがよくあります。
排他的論理和はXOR、EX-ORと略されます。
プログラムには、XOR と ⊕ という 2 つの演算子があります。
それの使い方:
z = x ⊕ y
z = x xor y
2. アルゴリズム
- ゼロに戻る法則: a⊕a=0
- 恒等法: a⊕0=a
- 交換法則: a⊕b=b⊕a
- 結合法則: a⊕b⊕c=a⊕(b⊕c)=(a⊕b)⊕c
- 再帰: a⊕b⊕a=b
- d=a⊕b⊕c から a=d⊕b⊕c を推測できる
- x が 2 進数 0101、y が 2 進数 1011 の場合、x⊕y=1110 です。比較される 2 つのビットが異なる場合にのみ結果は 1 になり、それ以外の場合、結果は 0 になります。つまり、「2 つの入力が同じ場合」同じ場合は 0、異なる場合は 1」です。
ある b a⊕b 0 0 0 0 1 1 1 0 1 1 1 0
3. ロジック
論理式:F = AB' + A'B
XORロジック図 1 に示します。
その論理シンボル図 2 に示します。
XOR 論理の関係は、AB が異なる場合、出力 P=1、AB が同じ場合、出力 P=0 となります。「⊕」は XOR 演算子の記号です。XOR 論理は AND または非論理の組み合わせでもあります。その論理式は次のとおりです。
P=A⊕B
図 1 からわかるように、XOR 演算のルールは次のとおりです。
0⊕0=0,0⊕1=1
1⊕0=1,1⊕1=0
ヒント 1:
同じ場合は 0、異なる場合は 1 とします。
ヒント 2:
入力 A が 0 の場合、出力 p = 入力 B
入力 A が 1 の場合、出力 p = 入力 B の逆数
実際、英語の XOR の定義はどちらか (is one) であり、両方ではありません。つまり、一方のみが true (1) の場合は true (1) となります。
4. 機能
コンピューターで一般的に使用される排他的論理和 (xor) の論理記号は、一般に xor ですが、⊕ も便利です。
真⊕偽=真
偽⊕真=真
偽⊕偽=偽
真⊕真=偽
または:
真 ⊕ 偽 = 真
偽 ⊕ 真 = 真
偽⊕ 偽 = 偽
真 ⊕ 真 = 偽
一部のコンピューター言語では、true を表すのに 1 を使用し、false を表すのに 0 を使用するため、2 バイトのビットごとの XOR は次のようになります。
00000000 |
|
クソ |
00000000 |
------------- |
|
結果 |
00000000 |
以下は 2 つのバイナリ値の XOR 計算です。
11111111 |
|
クソ |
00000000 |
-------------- |
|
結果 |
11111111 |
実際には、すべて 10 進数値が使用されるため、2 つの 10 進数値がどのように XOR 演算されるかを見てみましょう。
5 ⊕ 3 = ?
1. XOR 計算の前に、すべての値がバイナリに変換されます。
5 と 3 をバイナリに変換すると、それぞれ 0101、0011 になります。
0101 |
|
クソ |
0011 |
-------- |
|
結果 |
0110 |
2. 結果 0110 を 10 進数に変換します: 6
3.したがって、5 ⊕ 3 = 6
5. 賢い使い方
他の言語とは異なり、C 言語と C++ 言語 (C++ は xor をサポートしており、使用法と効果は '^' と同じです) では xor を使用せず、"^" を使用し、入力方法は Shift+6 です。(他の言語の「^」は一般に力を意味します)
2 つの変数の値を交換する必要がある場合は、交換に一般的に使用される中間変数に加えて、次のように XOR を使用して 2 つの変数のみを交換することもできます。
void swap(int &a,int &b)
{
a=a^b;
b=b^a;
a=a^b;
}
詳細な説明:
a1=a^b
b=b^a1=b^a^b=a
//此时a1=a^b b=a
a=a1^a=a^b^a=b
知らせ:
a=a^b^(b=a);//此类形式是不正确的UB行为,在不同编译器中会有不同的结果,切勿使用
これでaとbの交換は完了です。
要約すると、同じ変数が別の変数と XOR 演算され、その XOR 値は別の数値と等しくなります ((a^b)^b=a など)。
使用例: 暗号化アルゴリズムの 1 つ以上の側面で使用して、アルゴリズムをより複雑にし、解読を困難にし、より安全にすることができます。
6. 加減算との関係
ガロア体の加算と減算の演算は同等です。つまり、XOR 演算です。乗算と除算では、多項式を直接乗算および除算し、原始多項式の剰余を求めます。