查看文章 |
有关变量交换
2009-10-31 08:38
论坛里有同学问到IB提到过的那个比较神奇的变量交换函数: void exchange(int& a, int& b) { assert(&a != &b); a^=b; b^=a; a^=b; } 这样为什么能达到交换的目的,其实我们写开来就明白了。 注意XOR运算有一个特性,当一个数a和b异或后,再异或b又会得a,那么结合异或的结合律,有: a' = a ^ b; b = b ^ a' = b ^ (a ^ b) = a; a = a' ^ b = a ^ b ^ b ^ (a ^ b) = b; 显然完成了交换。 |
最近读者: