best algorithm for swapping?
this swapping trick is sometimes dangerous, I have seen a a wrong quicksort program using this swap generates wrong results. But a usual swap generates correct program.
Respect to speed, the compiler sometimes generates faster code if we use a tmp variable.
use tmp = a; a = b; b = tmp;
a^=b^=a^=b;
probably crashes because it invokes the dreaded undefined behaviour. The rule it breaks is that it modifies a
twice without an intervening sequence point. It can be fixed by inserting some sequence points - for example, with the comma operator:
a ^= (b ^= a ^= b, b);`
Or by breaking it up into multiple statements:
b ^= a ^= b; a ^= b;
It is still, however, usually a bad method for swapping variables - several of the other answers and comments have adequately explained why.
See http://en.wikipedia.org/wiki/Swap_(computer_science) .
Using a temporary variable generates more overhead, but is more stable than the XOR swap algorithm and parallel computing renders it faster than XOR swap.
See the first code example of http://www.ibm.com/developerworks/linux/library/l-metaprog1.html for a solid implementation of using a temporary variable for swapping.