HOWTO · Python

XOR en Python

Aprende a usar XOR en Python con enteros y booleanos, ejemplos prácticos y explicaciones claras del operador ^.

En esta página

XOR, es decir, OR exclusivo, compara dos valores y es verdadero cuando exactamente uno de ellos es verdadero. En Python, el operador de acento circunflejo (^) realiza XOR con enteros y booleanos. Úsalo cuando necesites uno de los dos valores, pero no ambos, o cuando necesites comparar bits directamente.

¿Qué es XOR?

XOR compara dos bits y devuelve 1 cuando son diferentes y 0 cuando coinciden:

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

La misma regla se aplica a los valores booleanos: exactamente un valor True produce True. Con enteros, Python aplica la regla de forma independiente a cada par de bits. Por eso, el XOR booleano y el XOR bit a bit están relacionados, aunque cumplen propósitos distintos.

Usar XOR con enteros

Usa el operador de acento circunflejo (^) para calcular el XOR bit a bit de dos enteros:

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

result = a ^ b
print(result)
6

La representación binaria de 5 es 0101, y la de 3 es 0011. Al comparar los bits correspondientes, se obtiene:

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

El resultado es 0110, es decir, 6 en decimal. El cero inicial solo sirve para mantener alineados ambos operandos; no cambia el valor.

Usar XOR con booleanos

Python también aplica ^ a los valores booleanos. El siguiente programa muestra las cuatro combinaciones de entrada y una implementación orientada a valores booleanos, construida con and, or y 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

La función resulta útil cuando una expresión booleana necesita una operación con un nombre explícito. Para entradas booleanas, left ^ right y xor(left, right) producen los mismos cuatro resultados. La forma lógica está pensada para condiciones booleanas; usa ^ para manipular bits de enteros.

Aplicaciones prácticas de XOR

El módulo operator expone la misma operación mediante la función xor(). Resulta útil cuando necesitas pasar la operación como objeto de función y funciona tanto con operandos booleanos como con enteros:

from operator import xor

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

Otra técnica bit a bit conocida permite intercambiar dos variables enteras sin usar una variable temporal:

x = 10
y = 20

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

print(x, y)
20 10

Partiendo de dos enteros, las tres operaciones funcionan de la siguiente manera:

  1. x se convierte en el XOR de x e y.
  2. Después, y se actualiza con el valor original de x al aplicar XOR al nuevo x y a y.
  3. Por último, x se actualiza con el valor original de y mediante la misma lógica.

La técnica es correcta para variables enteras, pero el código Python habitual suele ser más claro con el desempaquetado de tuplas: x, y = y, x. La variante con XOR es principalmente útil para comprender las operaciones bit a bit o cuando una restricción exige específicamente usarla.

Conclusión

En Python, usa ^ para XOR: compara directamente los valores booleanos y compara cada bit cuando sus operandos son enteros. La función operator.xor() proporciona la misma operación en forma de función, mientras que and, or y not pueden expresar explícitamente la regla booleana. Elige la forma que comunique mejor si tu tarea es lógica o bit a bit.

Preguntas frecuentes

  1. ¿Qué significa XOR en Python?
    XOR significa OR exclusivo: produce un valor verdadero cuando exactamente una de las dos entradas es verdadera. Para operandos enteros, aplica esa regla a cada par de bits correspondiente.

  2. ¿Cómo realizo una operación XOR con dos enteros en Python?
    Usa el operador de acento circunflejo: result = a ^ b.

  3. ¿Puedo usar XOR con valores booleanos en Python?
    Sí. True ^ False y False ^ True producen True, mientras que dos entradas booleanas iguales producen False.

  4. ¿Cuál es una aplicación práctica de XOR en programación?
    XOR puede intercambiar dos variables enteras mediante tres operaciones bit a bit. En el código Python habitual, el desempaquetado de tuplas suele ser más claro.

  5. ¿XOR es conmutativo en Python?
    Sí. XOR es conmutativo, por lo que a ^ b es igual a b ^ a para operandos compatibles.