Swap di due variabili senza la variabile di appoggio ? Si può !
Una delle prime funzioni (escludendo il solito Main() che produce il famosissimo “Hello World”) che si scrive quando ci si avvicina al mondo della programmazione, è quella che ci permette lo swap (scambio) di valori tra due variabili.
Tipicamente si è portati a scrivere del codice di questo tipo …
1: private void Swap(ref int a, ref int b)
2: {
3: if (a != b)
4: {
5: int tmp;
6:
7: tmp = a;
8: a = b;
9: b = tmp;
10: }
11: }
… ossia siamo portati ad utilizzare una terza variabile (tmp) di appoggio.
Ebbene, tale variabile si può assolutamente evitare, riscrivendo la funzione nel modo seguente …
1: private void Swap(ref int a, ref int b)
2: {
3: if (a != b)
4: {
5: a ^= b;
6: b ^= a;
7: a ^= b;
8: }
9: }
… ed utilizzando solo ed esclusivamente le proprietà dell’operatore logico XOR (commutativa, associativa identità).