template <class T> void g_SwapInteger(T &a, T &b) { a = a ^ b; b = a ^ b; a = a ^ b; }
a0 = a b0 = b
a1 = a0 ^ b0 = a ^ b b1 = b0 = b
a2 = a1 = a ^ b b2 = a1 ^ b1 = a ^ b ^ b = a
a3 = a2 ^ b2 = a ^ b ^ a = b b3 = b2 =a
template <class T> void g_SwapInteger(T &a, T &b) { a = a - b; b = a + b; a = b - a; }
? 算法证明
a0 = a, b0 = b
a1 = a0 - b0 = a - b, b1 = b0 = b
a2 = a1 = a - b, b2 = a1 + b1 = a - b + b = a
a3 = b2 - a2 = a - (a - b) = b, b3 = b2 = a
原文:http://www.cnblogs.com/heartchord/p/algorithm.html