HOWTO · Python
XOR in Python
Scopri come usare l'operatore XOR in Python con esempi chiari su interi e valori booleani, applicazioni pratiche e spiegazioni dettagliate.
In questa pagina
XOR, o OR esclusivo, confronta due valori e restituisce vero quando esattamente uno dei due è vero. In Python, l’operatore di accento circonflesso (^) esegue XOR su interi e valori booleani. Usalo quando ti serve uno dei due valori, ma non entrambi, oppure quando devi confrontare direttamente i bit.
Che cos’è XOR?
XOR confronta due bit e restituisce 1 quando sono diversi e 0 quando coincidono:
- 0 XOR 0 = 0
- 0 XOR 1 = 1
- 1 XOR 0 = 1
- 1 XOR 1 = 0
La stessa regola vale per i valori booleani: esattamente un valore True produce True. Per gli interi, Python applica la regola indipendentemente a ogni coppia di bit; perciò lo XOR booleano e lo XOR bit a bit sono correlati, ma hanno scopi diversi.
Utilizzare XOR con gli interi
Usa l’operatore di accento circonflesso (^) per calcolare lo XOR bit a bit di due interi:
a = 5 # Binary: 0101
b = 3 # Binary: 0011
result = a ^ b
print(result)
6
La rappresentazione binaria di 5 è 0101, mentre quella di 3 è 0011. Confrontando i bit corrispondenti si ottiene:
- 0 XOR 0 = 0
- 1 XOR 0 = 1
- 0 XOR 1 = 1
- 1 XOR 1 = 0
Il risultato è 0110, cioè 6 in decimale. Lo zero iniziale serve solo ad allineare i due operandi; non modifica il valore.
Utilizzare XOR con i valori booleani
Python applica ^ anche ai valori booleani. Il programma seguente mostra tutte e quattro le combinazioni di input e un’implementazione orientata ai valori booleani costruita con 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
La funzione è utile quando un’espressione booleana deve avere un’operazione denominata. Con input booleani, left ^ right e xor(left, right) producono gli stessi quattro risultati. La forma logica è pensata per le condizioni booleane; usa ^ per la manipolazione dei bit degli interi.
Applicazioni pratiche di XOR
Il modulo operator espone la stessa operazione della funzione xor(). Può essere comodo quando serve un oggetto funzione e funziona sia con operandi booleani sia con operandi interi:
from operator import xor
print(xor(True, False))
print(xor(5, 3))
True
6
Un’altra tecnica bit a bit nota consente di scambiare due variabili intere senza una variabile temporanea:
x = 10
y = 20
x = x ^ y
y = x ^ y
x = x ^ y
print(x, y)
20 10
Partendo da due interi, le tre operazioni funzionano nel modo seguente:
xdiventa lo XOR dixey.yviene quindi aggiornato al valore originale dixeseguendo lo XOR tra il nuovoxey.- Infine,
xviene aggiornato al valore originale diyusando la stessa logica.
La tecnica è corretta per le variabili intere, ma nel normale codice Python l’assegnazione mediante spacchettamento di tuple è in genere più chiara: x, y = y, x. La forma con XOR è soprattutto utile per comprendere le operazioni bit a bit o quando si lavora sotto un vincolo che la richiede esplicitamente.
Conclusione
In Python, usa ^ per XOR: confronta direttamente i valori booleani e confronta ogni bit quando gli operandi sono interi. La funzione operator.xor() fornisce la stessa operazione in forma di funzione, mentre and, or e not possono esprimere esplicitamente la regola booleana. Scegli la forma che comunica meglio se il tuo compito è logico o bit a bit.
Domande frequenti
-
Che cosa significa XOR in Python?
XOR significa OR esclusivo: produce vero quando esattamente uno dei due input è vero. Con operandi interi, applica questa regola a ogni coppia di bit corrispondenti. -
Come eseguo un’operazione XOR su due interi in Python?
Usa l’operatore di accento circonflesso:result = a ^ b. -
Posso usare XOR con i valori booleani in Python?
Sì.True ^ FalseeFalse ^ TruesonoTrue, mentre due input booleani uguali produconoFalse. -
Qual è un’applicazione pratica di XOR nella programmazione?
XOR può scambiare due variabili intere tramite tre operazioni bit a bit. Nel normale codice Python, l’assegnazione mediante spacchettamento di tuple è generalmente più chiara. -
XOR è commutativo in Python?
Sì. XOR è commutativo, quindia ^ bè uguale ab ^ aper operandi compatibili.