Come scambiare i valori tra due variabili in C
Nel linguaggio C per scambiare i valori tra due variabili ci sono due metodi, un metodo classico tramite una terza variabile di appoggio e uno meno conosciuto basato sullo XOR.
Come scambiare valori tra due variabili tramite una terza variabile
Per attuare lo scambio dei valori tra le variabili a e b, creo una terza variabile temporanea c.
Poi assegno alla variabile c il valore della variabile a.
c=a;
a=b;
b=c;
A questo punto assegno alla variabile a il valore della variabile b. Infine, assegno alla variabile b il valore della variabile c.
In questo modo ho scambiato i valori tra la variabile a e b. E' il metodo classico e più conosciuto.
Come scambiare i valori tra due variabili senza usare una terza variabile
In questo caso lo scambio dei valori si basa sull'operatore XOR.
Cos'è l'operatore XOR? Dati due numeri binari, l'operatore XOR restituisce 1 se i due numeri sono diversi e 0 se sono uguali. Questa operazione logica anche conosciuta come disgiunzione esclusiva.
In questo caso il passaggio dei valori avviene in questo modo:
a=a^b;
b=b^a;
a=a^b;
Lo scambio viene effettuato senza aver effettuato una terza variabile temporanea.
Un esempio pratico
a=10; // in binario 10 = 1010
b=5; // in binario 5 = 101
La prima istruzione (a=a^b) applica lo XOR tra la variabile a e b.
Poi assegna il risultato alla variabile a.
1010 (a)
0101 (b)
-----
1111 ===> a
La seconda istruzione ( b=b^a ) applica lo XOR tra le variabili b e a ( che ora vale 1111 ).
Poi assegna il risultato alla variabile b.
0101 (b)
1111 (a)
-----
1010 ===> b
Ora la variabile b vale 1010 in binario ossia 10 in decimale.
Infine, la terza istruzione applica lo XOR tra la variabile a e b ( che ora vale 1010 ).
Poi assegna il risultato alla variabile a.
1111 (a)
1010 (b)
-----
0101 ===> a
Ora la variabile a vale 0101 in binario ossia 5 in decimale.
In questo modo ho scambiato i valori tra le variabile a e b senza usare una terza variabile di appoggio.