异或运算符大家都知道,这里用到的是:
任何数与 0 异或结果为它本身:
a ^ 0 = a
任何数与自己异或结果为 0 :
a ^ a = 0
所有就有了以下的方法:
void swap(int &a, int &b)
{
tmp = a ^ b;
b = b ^ tmp;
a = a ^ tmp;
}
其中就相当于:
b = b ^ b ^ a
结果为 b = a
a = a ^ a ^ b
结果为 a = b
接下来我们改进一下,减少一个临时变量的使用:
void swap(int &a, int &b)
{
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
再来改进一下,代码更精简些:
void swap(int &a, int &b)
{
a ^= b;
b ^= a;
a ^= b;
}
不过仅限于整数