①引入第三个变量

#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
int a = 4, b = 5;
printf("a=%d b=%d\n", a, b);
int temp = a;
a = b;
b = temp;
printf("a=%d b=%d\n", a, b);
}

②求和法

#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
int a = 4, b = 5;
printf("a=%d b=%d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("a=%d b=%d\n", a, b);
}

③使用异或

#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
int a = 4, b = 5;
printf("a=%d b=%d\n", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a=%d b=%d\n", a, b);
}

解释:

1.任意一个变量X与其自身进行异或运算,结果为0,即X^X=0

2.任意一个变量X与0进行异或运算,结果不变,即X^0=X

3.异或运算具有可结合性,即a^b^c=(a^b)^c=a^(b^c)

4.异或运算具有可交换性,即a^b=b^a


第一步: a = a ^ b;

完成后 a变量的结果为a ^ b

第二步: b = a ^ b;

此时赋值号右边的a保存的是a ^ b的值,那么将赋值号右边的a用a ^ b替换,

得到(a ^ b) ^ b=a ^ (b ^ b)=a ^0=a,

即经过第二步运算后b中的值为a,即b=a,将a换到了b里