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ą.