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 …

private void Swap(ref int a, ref int b)
{
    if (a != b)
    {
        int tmp;

        tmp = a;
        a = b;
        b = tmp;
    }
}

… ossia siamo portati ad utilizzare una terza variabile (tmp) di appoggio.

Ebbene, tale variabile si può assolutamente evitare, riscrivendo la funzione nel modo seguente …

private void Swap(ref int a, ref int b)
{
    if (a != b)
    {
        a ^= b;
        b ^= a;
        a ^= b;
    }
}

… ed utilizzando solo ed esclusivamente le proprietà dell’operatore logico XOR (commutativa, associativa identità).

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s