#include<iostream>
using namespace std;
int main()
{
int a = 3;
int b = 5;
cout << "a:" << a << " b:" << b << endl;
int tmp = a;
a = b;
b = tmp;
cout << "a:" << a << " b:" << b << endl;
return 0;
}
使用异或运算可以无需定义中间变量:
#include<iostream>
using namespace std;
int main()
{
int a = 3;
int b = 5;
cout << "a:" << a << " b:" << b << endl;
a = a ^ b;
b = a ^ b;
a = a ^ b;
cout << "a:" << a << " b:" << b << endl;
return 0;
}
第一步 a' = a ^ b 使得第二步实际运算的数值为 b' = a ^ b ^ b = a,是
a
a
a 原本的数值,而第三步实际运算的数值为 a'' = a' ^ b' = a ^ b ^ a = b,是
b
b
b 原来的数值,从而实现交换。这相当于如下的代码:
a = a + b;
b = a - b;
a = a - b;
并且使用异或还不会发生溢出的情况,例如两个变量
a
,
b
a,b
a,b 均为无符号整数时,加法可能会导致上述第一行代码数值溢出。