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:
xse convierte en el XOR dexey.- Después,
yse actualiza con el valor original dexal aplicar XOR al nuevoxy ay. - Por último,
xse actualiza con el valor original deymediante 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
-
¿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. -
¿Cómo realizo una operación XOR con dos enteros en Python?
Usa el operador de acento circunflejo:result = a ^ b. -
¿Puedo usar XOR con valores booleanos en Python?
Sí.True ^ FalseyFalse ^ TrueproducenTrue, mientras que dos entradas booleanas iguales producenFalse. -
¿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. -
¿XOR es conmutativo en Python?
Sí. XOR es conmutativo, por lo quea ^ bes igual ab ^ apara operandos compatibles.