ビット単位XOR計算機とは?
ビット単位のXOR(排他的論理和)計算機は、2つの整数を1ビットずつ比較して結合します。各ビットの位置において、入力の2ビットが異なるときは出力が1に、同じときは0になります。XORはプログラミング、デジタル論理回路、暗号、誤り検出などで使われる基本的な演算のひとつです。
使い方
1つ目の整数(A)と2つ目の整数(B)を入力して実行するだけです。計算機はXORの結果を10進数で返すほか、2進数・16進数の表記も表示するので、ビットごとに結果を確認できます。正の整数だけでなく負の整数にも対応しています。
計算式の解説
XORは多くのプログラミング言語でA ^ B、数学の表記では \(\text{A} \oplus \text{B}\) と書きます。1ビットあたりの真理値表は次のとおりです:\(0 \oplus 0 = 0\)、\(0 \oplus 1 = 1\)、\(1 \oplus 0 = 1\)、\(1 \oplus 1 = 0\)。一般化すると次のように表せます:
この演算はすべてのビットのペアに対して独立して適用されます。便利な性質としてA ^ A = 0、A ^ 0 = Aがあり、これが値の入れ替えやフラグの反転(トグル)にXORが使われる理由です。
計算例
A = 12、B = 10 で考えてみましょう。2進数では 12 = 1100、10 = 1010 です。各桁を比較すると、\(1 \oplus 1 = 0\)、\(1 \oplus 0 = 1\)、\(0 \oplus 1 = 1\)、\(0 \oplus 0 = 0\) となり、0110 = 6 が得られます。したがって次のようになります:
ビット演算の比較
すべてのビット演算は1ビットずつ機能します。入力ビットのペア \(A\) と \(B\) ごとに、演算は単一の出力ビットを生成します。下の表は、最も一般的な6つの演算に対する完全な単一ビット真理値表を示しています。XOR(排他的論理和、\(A \oplus B\) と記述)は、2つの入力ビットが異なる場合にのみ1を出力します。
| A | B | AND (A&B) | OR (A|B) | XOR (A^B) | NAND ~(A&B) | NOR ~(A|B) | XNOR ~(A^B) |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 |
| 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
XORはXNORの正確な補集合であり、XORが1に等しいのは入力が異なる2行だけであることに注意してください。この「差検出」特性は、XORをパリティチェック、簡単な暗号化、およびビット反転に有用にしています。
一般的な入力ペアでのXOR
以下の表は、ビットごとのXOR演算を通していくつかの代表的なペアを処理し、各オペランドをバイナリで示し、その後、結果を10進数、バイナリ、および16進数で示します。XORはビットごとに実行されます。2つのバイナリ数を整列させ、ビットが異なる場所に1を出力します。
| A | B | A(バイナリ) | B(バイナリ) | A ^ B(10進数) | A ^ B(バイナリ) | A ^ B(16進数) |
|---|---|---|---|---|---|---|
| 5 | 3 | 0101 | 0011 | 6 | 0110 | 0x6 |
| 255 | 15 | 11111111 | 00001111 | 240 | 11110000 | 0xF0 |
| 12 | 12 | 1100 | 1100 | 0 | 0000 | 0x0 |
| 7 | 0 | 0111 | 0000 | 7 | 0111 | 0x7 |
| 10 | 6 | 1010 | 0110 | 12 | 1100 | 0xC |
| -1 | 1 | …11111111 | …00000001 | -2 | …11111110 | 0x…FE |
2つのパターンが目立ちます。オペランドが0の場合、XORは他のオペランドを変わらずに返します(\(7 \oplus 0 = 7\))。両方のオペランドが同じ場合、XORは0を返します(\(12 \oplus 12 = 0\))。負の例は2の補数表現を使用しています:\(-1\) はすべて1ビットであるため、それを任意の値とXORすると、すべてのビットが反転されます(これはビットごとのNOTと同等)。\(-1 \oplus 1 = -2\) が得られます。
よくある質問
XORとはどういう意味ですか? 排他的論理和(Exclusive OR)のことで、2つの入力のうち「ちょうど一方だけ」が真(1)のときにのみ真になります。
なぜXORは暗号で使われるのですか? データを鍵でXORする処理は可逆だからです。同じ鍵をもう一度適用すると元のデータに戻ります(\(\text{A} \oplus \text{K} \oplus \text{K} = \text{A}\))。
負の数にも対応していますか? はい。負の値は2の補数表現で扱われるため、2進数の表示では負の数のビット数が多く表示されることがあります。