Curiosity is insubordination in its purest form. -Vladimir Nabokov

martes, 14 de marzo de 2006

Intercambiar el valor de 2 variables sin usar una variable temporal

#define SWAP(a,b) (((a) ^= (b)), ((b) ^= (a)), ((a) ^= (b)))

En 2005, Iain A. Fleming apunto que este metodo no funciona si las 2 variables a intercambiar tienen la misma direccion de memoria, por ejemplo SWAP(a[i], a[j]) si i == j.

Una solucion es definir la macro como:
(((a) == (b)) || (((a) ^= (b)), ((b) ^= (a)), ((a) ^= (b))))


Es decir:
(((a) == (b)) || ((a) ^= (b) ^= (a) ^= (b)))


Por cierto, en Perl podemos hacerlo asi:
($a, $b) = ($b, $a);

Related Posts by Categories