面试中经常会出现的问题,主要针对整数类型,有两种解法:
- 数值运算法
void swap(int &A, int &B)
{
A = A + B;
B = A - B;
A = A - B;
}
从理解的角度来说,假如A'和B'代表交互以后的值,那么按照以上运算规则就有:A'=A+B; B'=A'-B=A+B-B=A; A'=A'-B'=A+B-A=B;
最后运算的结果就变成了A'=B;B'=A;这样就完成了交换。
- 异或运算法
void swap(int &A, int &B)
{
A = A ^ B;
B = A ^ B;
A = A ^ B;
}
这种方式跟前面一种类似,只是需要理解异或运算的基本法则:
A^A=0;A^0=A;
从理解的角度来说,假如A'和B'代表交互以后的值,那么按照以上运算规则就有:A'=A^B; B'=A'^B=A^B^B=A^0=A; A'=A'^B'=A^B^A=A^A^B=0^B=B; 这样的结果就变成了A'=B;B'=A; 完成了交换。