XOR-swap, lepszy sposób na zamianę wartości liczbowych.

Manna5

Tradycyjny sposób na zamianę dwóch zmiennych a i b w języku C wygląda tak:

t = a;
a = b;
b = t; 

Jego wadą jest to, że wymaga on zmiennej tymczasowej t. Alternatywny sposób jakim jest XOR-swap pozwala tego unkinąć:

a ^= b;
b ^= a;
a ^= b;

Wygląda on dosyć dziwnie, lecz działa. Oczywiście tylko dla liczb oraz znaków (gdyż znaki są reprezentowane liczbowo). Można użyć funkcji:

void xorswap (int *a, int *b)
  {
    *a ^= *b;
    *b ^= *a;
    *a ^= *b;
  }

I potem wywołać xorswap (&zmienna1, &zmienna2). Warto pamiętać, że XOR-swap zadziała źle (zniszczy dane) jeśli omyłkowo zamienimy zmienną z nią samą.

0 komentarzy