DevExperience

.Net Framework, Embedded Systems & Design Patterns Paolo Patierno's Blog

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à).
Posted: 28 ott 2011 19:26 da Paolo | con no comments
Inserito sotto: