Makefile it

Friday, February 06, 2009

Fer un Swap

A la wikipedia [1] he vist aquest codi:

#define SWAP(x, y) ( x ^= y ^= x ^= y)

us agrada?

5 Comments:

At 1:58 AM, Blogger Jordi said...

Qué guapo! No me lo había pensado nunca! Nada de if-then-else, operaciones bit-wise super eficientes, y además como macro. Fantástico!

 
At 2:19 AM, Blogger lluís said...

Suposant que cost(XOR)=cost(MOV)

opció 1:
XOR AX, BX
XOR BX, AX
XOR AX, BX

opció 2:
MOV CX, AX
MOV AX, BX
MOV BX, CX

La opció 1 necessita un registre menys !, a més per al segon cas has de suposar que el compilador de C ho optimitzarà correctament, en la opció 1 no té més alternativa :p

Voto opció 1 !

 
At 2:35 AM, Blogger Helio Tejedor said...

Ahora viene cuando la matan, ¿por qué el siguiente código no chuta con el g++?

void swap(int* x, int* y) {
*x ^= *y ^= *x ^= *y;
}

 
At 2:36 AM, Blogger Helio Tejedor said...

O el siguiente:

template<typename T> void swap(T& x, T& y) {
x ^= y ^= x ^= y;
}

 
At 9:21 AM, Blogger Jordi said...

JO... pues no, no lo sé. Algo tendrán que ver los punteros :-D

 

Post a Comment

<< Home