Da più di una persona mi è arrivata la richiesta di spiegare passo passo i passaggi della procedura esposta. ***SPOILER***: se ancora ci state ragionando sopra e non volete sapere la situazione, non proseguite la lettura.
La metodologia esposta si basa sull’algoritmo detto di XOR Swap, ossia sull’applicazione dell’operatore XOR bit per bit ai numeri. La tabella di verità dell’operatore XOR è:
In buona sostanza quindi, l’algoritmo si basa sulla proprietà dell’operatore XOR tale per cui
(x ^ y) ^ x = y
Riprendiamo quindi l’esempio numerico dell’altra volta:
int x = 7, y = 5;
Trasformando in binario:
x = 111
y = 101
Ora applichiamo le operazioni, ricordandoci di applicare lo XOR bit per bit, quindi il primo bit del primo numero con il primo bit del secondo numero, e così via:
x = x ^ y = 111 ^ 101 = 010
y = y ^ x = 101 ^ 010 = 111
x = x ^ y = 010 ^ 111 = 101
Alla fine otteniamo quindi:
x = 101
y = 111
Ossia… lo swap dei due valori iniziali! Resta di stucco… è un barbatrucco! 🙂
Che ne dite, me la merito una birretta? Il widget per le donazioni con PayPal è in alto a destra 😉