HOWTO · Python

XOR in Python

Erfahren Sie, wie Sie den XOR-Operator in Python für Ganzzahlen und boolesche Werte verwenden, praktische Anwendungen kennenlernen und XOR-Operationen verständlich umsetzen.

Auf dieser Seite

XOR, also exklusives Oder, vergleicht zwei Werte und ist genau dann wahr, wenn genau einer der beiden Werte wahr ist. In Python führt der Caret-Operator (^) XOR für Ganzzahlen und boolesche Werte aus. Verwenden Sie ihn, wenn einer der beiden Werte, aber nicht beide, gelten soll oder wenn Sie Bits direkt vergleichen müssen.

Was ist XOR?

XOR vergleicht zwei Bits und gibt 1 zurück, wenn sie verschieden sind, und 0, wenn sie übereinstimmen:

  • 0 XOR 0 = 0
  • 0 XOR 1 = 1
  • 1 XOR 0 = 1
  • 1 XOR 1 = 0

Für boolesche Werte gilt dieselbe Regel: Genau ein True-Wert ergibt True. Bei Ganzzahlen wendet Python die Regel unabhängig auf jedes entsprechende Bitpaar an. Boolesches XOR und bitweises XOR sind daher miteinander verwandt, erfüllen aber unterschiedliche Zwecke.

XOR mit Ganzzahlen verwenden

Verwenden Sie den Caret-Operator (^), um das bitweise XOR zweier Ganzzahlen zu berechnen:

a = 5  # Binary: 0101
b = 3  # Binary: 0011

result = a ^ b
print(result)
6

Die Binärdarstellung von 5 ist 0101, die von 3 ist 0011. Beim Vergleich der jeweils entsprechenden Bits entsteht:

  • 0 XOR 0 = 0
  • 1 XOR 0 = 1
  • 0 XOR 1 = 1
  • 1 XOR 1 = 0

Das Ergebnis ist 0110, also dezimal 6. Die führende Null richtet lediglich beide Operanden aus; sie ändert den Wert nicht.

XOR mit booleschen Werten verwenden

Python wendet ^ auch auf boolesche Werte an. Das folgende Programm zeigt alle vier Eingangskombinationen sowie eine auf boolesche Werte ausgerichtete Implementierung mit and, or und not:

def xor(left, right):
    return (left and not right) or (not left and right)

for left, right in ((False, False), (False, True), (True, False), (True, True)):
    print(f"{left} ^ {right} -> {left ^ right}; xor() -> {xor(left, right)}")
False ^ False -> False; xor() -> False
False ^ True -> True; xor() -> True
True ^ False -> True; xor() -> True
True ^ True -> False; xor() -> False

Die Funktion ist nützlich, wenn ein boolescher Ausdruck eine benannte Operation benötigt. Für boolesche Eingaben liefern left ^ right und xor(left, right) dieselben vier Ergebnisse. Die logische Form ist für boolesche Bedingungen gedacht; verwenden Sie ^ für die Bitmanipulation von Ganzzahlen.

Praktische Anwendungen von XOR

Das Modul operator stellt dieselbe Operation als Funktion xor() bereit. Das ist praktisch, wenn Sie ein Funktionsobjekt benötigen; die Funktion arbeitet sowohl mit booleschen als auch mit ganzzahligen Operanden:

from operator import xor

print(xor(True, False))
print(xor(5, 3))
True
6

Eine bekannte bitweise Technik vertauscht zwei ganzzahlige Variablen ohne temporäre Variable:

x = 10
y = 20

x = x ^ y
y = x ^ y
x = x ^ y

print(x, y)
20 10

Ausgehend von zwei Ganzzahlen funktionieren die drei Operationen folgendermaßen:

  1. x wird zum XOR von x und y.
  2. Anschließend wird y auf den ursprünglichen Wert von x gesetzt, indem das neue x mit y per XOR verknüpft wird.
  3. Schließlich wird x mit derselben Logik auf den ursprünglichen Wert von y gesetzt.

Die Technik ist für ganzzahlige Variablen korrekt, aber üblicher Python-Code ist mit Tuple-Unpacking meist verständlicher: x, y = y, x. Die XOR-Variante ist vor allem nützlich, um bitweise Operationen zu verstehen oder eine Vorgabe zu erfüllen, die sie ausdrücklich verlangt.

Fazit

Verwenden Sie in Python ^ für XOR: Der Operator vergleicht boolesche Werte direkt und bei Ganzzahlen jedes einzelne Bit. Die Funktion operator.xor() stellt dieselbe Operation in Funktionsform bereit, während sich die boolesche Regel mit and, or und not ausdrücklich formulieren lässt. Wählen Sie die Form, die am deutlichsten zeigt, ob Ihre Aufgabe logisch oder bitweise ist.

FAQ

  1. Was bedeutet XOR in Python?
    XOR bedeutet exklusives Oder: Das Ergebnis ist wahr, wenn genau eine von zwei Eingaben wahr ist. Bei Ganzzahloperanden wird diese Regel auf jedes entsprechende Bit angewendet.

  2. Wie führe ich in Python eine XOR-Operation auf zwei Ganzzahlen aus?
    Verwenden Sie den Caret-Operator: result = a ^ b.

  3. Kann ich XOR in Python mit booleschen Werten verwenden?
    Ja. True ^ False und False ^ True ergeben True, während gleiche boolesche Eingaben False ergeben.

  4. Was ist eine praktische Anwendung von XOR in der Programmierung?
    XOR kann zwei ganzzahlige Variablen mit drei bitweisen Operationen vertauschen. In normalem Python-Code ist Tuple-Unpacking im Allgemeinen verständlicher.

  5. Ist XOR in Python kommutativ?
    Ja. XOR ist kommutativ, daher gilt für kompatible Operanden a ^ b = b ^ a.