XOR または排他的論理演算は、暗号化およびエラー チェックとフォールト トレランスのためのパリティ ビットの生成で広く使用されているブール論理演算です。この操作は 2 つの入力を受け取り、1 つの出力を生成します。この操作は伝統的にビットごとに行われますが、論理的に実行することもできます。この記事では、2 つの変数の論理 XOR を取得する方法を説明します。 パイソン 。
2 つの数値の XOR
XOR は ビット演算子 、両方の整数を 2 進数に変換した後、ビットごとに比較します。 XOR (バイナリ) の真理値表を以下に示します。
| あ | B | A⊕B |
|---|---|---|
| 1 | 1 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 0 | 0 | 0 |
XOR 演算の式は次のとおりです。
XOR(A, B) = ( A .overline{B}) + (B.overline{A})>Python では、特にこの目的のために演算子、つまりキャレット ^ が提供されているため、2 つの整数の XOR を実行するのは簡単です。ただし、この操作は Python の演算子モジュールを使用して実現することもできます。
注記: XOR 操作を実行する際に注意すべき点がいくつかあります。
ハードカバーとペーパーバック
- XOR は同種の要素間でのみ行う必要があります。つまり、それらのデータ型は同じである必要があります。
- 文字列のブール値は次のようになります 真実 文字列が空でない場合、および 間違い 文字列が空の場合。
次に、Python のさまざまなデータ型に対する XOR 演算を見てみましょう。
整数の XOR
まず整数が 2 進数に変換され、次に各ビットが相互に比較されます。最終的な答えは、再び元の整数形式に変換されます。次のコードは、2 つの整変数の XOR を実行するためのキャレットの使用法を示しています。
例: まず、10 と 27 の整数値を含む 2 つの変数が初期化されました。次に、キャレット演算子を使用して 2 つの変数の xor が取得されます。操作の結果が表示されます。
パイソン
# First integer a = 10 # Second integer b = 27 # Performing the xor and storing the result in separate variable xor = a ^ b print(xor)>
出力:
17>
時間計算量: O(1)
空間の複雑さ: O(1)
ブール値の XOR
2 つのブール変数の XOR は非常に簡単です。 XOR 演算の出力は 0 または 1 で、ブール形式でそれぞれ True または Flase を表します。したがって、ブール データ型の論理 XOR を取得するには、入力値として True または False が提供されます。
例: まず 2 つのブール変数が値で初期化され、次にキャレット演算子を使用してそれらに対して XOR 演算が実行されます。
パイソン # First boolean a = True # Second boolean b = False # Performing the xor operation xor = a ^ b print(xor)>
出力:
シェルスクリプトのパラメータ
True>
時間計算量: O(1)
文字列.値
空間の複雑さ: O(1)
文字列の XOR
文字列はシーケンスであるため、文字列に対して操作を実行するにはデータ型を正規化する必要があります。したがって、文字列は bool に変換され、それに対して xor 演算を実行できます。しかし、このため、操作の結果はバイナリになります。つまり、次のいずれかの結果になります。 真実 または 間違い (結果の値が生成される整数の xor とは異なります)。
例: 最初に 2 つの文字列が定義されます。そのうちの 1 つは空の文字列です。次に、文字列がブール データ型に変換され、XOR 演算が実行されます。結果が表示されます。
パイソン # First string a = 'Hello World!' # Second string b = '' # Performing the xor operation xor = bool(a) ^ bool(b) print(xor)>
出力:
True>
時間計算量: O(n)
空間計算量: O(n)、n は文字列の長さ
演算子モジュールを使用した 2 つの変数の XOR
Python には演算子モジュールがあり、算術演算子、論理演算子、ビット単位演算子、および比較演算子用の事前定義関数のセットを提供します。また、2 つの変数の XOR を取得するために使用できるビット単位演算子の XOR 関数も提供します。
タイプスクリプトの日付
例: まずオペレーターモジュールをインポートします。次に、2 つの変数が値で初期化され、演算子モジュールの xor 関数を使用してそれらに対して XOR 演算が実行されます。
パイソン # import module import operator # First integer a = 10 # Second integer b = 27 # Performing the xor using operator module xor = operator.xor(a,b) print(xor)>
出力:
17>
時間計算量: O(1)
空間の複雑さ: O(1)
一時変数を使用せずに XOR を使用して 2 つの整数を交換する
Python の XOR ビット演算は、一時変数を使用せずに 2 つの整数を交換するために使用することもできます。これがどのように機能するかを見てみましょう。
a = a ^ b b = a ^ b a = a ^ b>
スワッピングには、XOR 演算を含む 3 つの式が必要です。
- 2 つの整数の XOR 「あ」 そして ' b’ そしてその結果を保存します 整数で 「あ」 自体。
- ここで、更新された値の XOR を計算します。 「あ」 と 「b」。 これにより、元の値が得られます。 「あ」 、現在はに保存されています 「b」 。
- 最後にXOR 「あ」 現在更新された値は 「b」 前のステップで。結果は元の値になります 「b」 。現在保存されているのは 「あ」 。
例: まず、2 つの整数が初期化されます。次に、上記の 3 つの手順を使用して、XOR キャレット演算子を使用して 2 つの整数の交換が行われます。最後に、交換された整数を出力します。
パイソン # First integer a = 10 # Second integer b = 27 print('Before Swapping:') print('a =', a) print('b =', b) # swapping integers using XOR a = a ^ b b = a ^ b a = a ^ b print('After Swapping:') print('a =', a) print('b =', b)> 出力:
Before Swapping: a = 10 b = 27 After Swapping: a = 27 b = 10>