Smart Variable Swapping
Sunday, May 31st, 2009 | Author: AlexJ

Mi-am adus aminte de un mic truc pe care îl foloseam în liceu şi dintr-un motiv necunoscut nu l-am mai folosit de mult, până la un laborator de Sisteme de Operare: schimbarea mai eficientă a unei variabile.

Metoda clasică este folosirea unei variabile auxilitare în care se păstrează una din variabile. A două metodă este folosirea XOR (sau exclusiv).

var1 = var1 XOR var2
var2  =var1 XOR var2
var1 = var1 XOR var2

Partea cea mai bună este că nu este dependentă de tipul de date şi teoretic s-ar putea schimba orice. Astfel, se poate crea uşor şi un macro pentru uz general. Folosind ultimul best practice învăţat despre macro-uri ( encapsularea codului funcţiei într-un do while(0) ), codul în C ar arăta aşa:

#define swap(a, b)       \
do                                   \
{                                      \
(a) = (a) ^ (b);               \
(b) = (b) ^ (a);              \
(a) = (a) ^ (b);              \
}while(0)                     \