Xor is the coolest, but that's just a personal opinion.
I always loved the xor swap trick, though it wasn't very clear why it worked until you think about it a little bit...
For example, does this look like it swaps A and B?
A = A ^ B;
B = A ^ B;
A = A ^ B;
I wondered for a while then sat down with a pen and worked it out. Try it! Or, if you're not so curious/inclined, here's the explanation:
A = A ^ B;
// Now the value in A is (A ^ B)
B = A ^ B;
// Remember, A now holds the original values xor'd, so this works out to
// B = (A ^ B) ^ B. xor's are associative, so that is the same as
// writing B = A ^ (B ^ B). Anything xor'd with itself is zero. Anything
// xor'd with zero is itself. So basically, that put the original value of A in B
A = A ^ B;
// A still holds (A ^ B) and B is now A, so this is A = (A ^ B) ^ A which is
// equivalent to A = (A ^ A) ^ B (xor's are also commutative) which again
// uses our observation that anything xor'd with itself is zero and anything
// xor'd with zero is itself, and finally this puts the value of B in A.
Voila. A swap with three of the fastest instructions that your computer can perform. You don't even need a temporary variable. Awesome.