HOWTO · Python
XOR em Python
Aprenda a usar o operador XOR em Python com exemplos de operações em inteiros e booleanos, aplicações práticas e explicações claras.
Nesta página
XOR, ou OR exclusivo, compara dois valores e resulta em verdadeiro quando exatamente um deles é verdadeiro. Em Python, o operador circunflexo (^) executa XOR com inteiros e booleanos. Use-o quando precisar de um valor ou do outro, mas não de ambos, ou quando precisar comparar bits diretamente.
O que é XOR?
XOR compara dois bits e retorna 1 quando eles são diferentes e 0 quando são iguais:
- 0 XOR 0 = 0
- 0 XOR 1 = 1
- 1 XOR 0 = 1
- 1 XOR 1 = 0
A mesma regra se aplica a valores booleanos: exatamente um valor True produz True. Para inteiros, Python aplica essa regra independentemente a cada par de bits. Por isso, XOR booleano e XOR bit a bit estão relacionados, mas servem a finalidades diferentes.
Usando XOR com Inteiros
Use o operador circunflexo (^) para calcular o XOR bit a bit entre dois inteiros:
a = 5 # Binary: 0101
b = 3 # Binary: 0011
result = a ^ b
print(result)
6
A representação binária de 5 é 0101, e a de 3 é 0011. Comparar os bits correspondentes resulta em:
- 0 XOR 0 = 0
- 1 XOR 0 = 1
- 0 XOR 1 = 1
- 1 XOR 1 = 0
O resultado é 0110, ou 6 em decimal. O zero à esquerda serve apenas para alinhar os operandos; ele não altera o valor.
Usando XOR com Booleanos
Python também aplica ^ a valores booleanos. O programa a seguir mostra as quatro combinações de entrada e uma implementação orientada a booleanos, construída com and, or e 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
A função é útil quando uma expressão booleana precisa de uma operação nomeada. Para entradas booleanas, left ^ right e xor(left, right) produzem os mesmos quatro resultados. A forma lógica destina-se a condições booleanas; use ^ para manipular bits de inteiros.
Aplicações práticas do XOR
O módulo operator expõe a mesma operação que a função xor(). Isso é conveniente quando você precisa de um objeto de função e funciona tanto com operandos booleanos quanto com inteiros:
from operator import xor
print(xor(True, False))
print(xor(5, 3))
True
6
Outra técnica conhecida de manipulação bit a bit permite trocar duas variáveis inteiras sem usar uma variável temporária:
x = 10
y = 20
x = x ^ y
y = x ^ y
x = x ^ y
print(x, y)
20 10
Começando com dois inteiros, as três operações funcionam assim:
xtorna-se o XOR dexey.- Em seguida,
yrecebe o valor original dexao aplicar XOR ao novoxe ay. - Por fim,
xé atualizado para o valor original deyusando a mesma lógica.
A técnica funciona com variáveis inteiras, mas o código Python comum costuma ser mais claro com o desempacotamento de tupla: x, y = y, x. A forma com XOR é principalmente útil para entender operações bit a bit ou quando se trabalha sob uma restrição que exige especificamente essa técnica.
Conclusão
Em Python, use ^ para XOR: ele compara valores booleanos diretamente e compara cada bit quando os operandos são inteiros. A função operator.xor() oferece a mesma operação em forma de função, enquanto and, or e not podem expressar explicitamente a regra booleana. Escolha a forma que comunica melhor se a tarefa é lógica ou envolve operações bit a bit.
FAQ
-
O que XOR significa em Python?
XOR significa OR exclusivo: produz verdadeiro quando exatamente uma de duas entradas é verdadeira. Para operandos inteiros, aplica essa regra a cada bit correspondente. -
Como realizo uma operação XOR em dois inteiros em Python?
Use o operador circunflexo:result = a ^ b. -
Posso usar XOR com valores booleanos em Python?
Sim.True ^ FalseeFalse ^ Trueresultam emTrue, enquanto entradas booleanas iguais resultam emFalse. -
Qual é uma aplicação prática de XOR na programação?
XOR pode trocar duas variáveis inteiras por meio de três operações bit a bit. No código Python comum, o desempacotamento de tupla costuma ser mais claro. -
XOR é comutativo em Python?
Sim. XOR é comutativo, portantoa ^ bé igual ab ^ apara operandos compatíveis.