平常可以创建临时变量的思路很好理解,思路如下图:
普通思路代码示例:
#include<stdio.h>
int main()
{
int a = 5;
int b = 8;
int tem = 0;
printf("交换前:a=%d b=%d\n", a, b);
tem=a;
a=b;
b=tem;
printf("交换后:a=%d b=%d\n", a, b);
return 0;
}
升级思路一:
直接上代码(运用加减法)
#include<stdio.h>
int main()
{
int a = 5;
int b = 8;
printf("交换前:a=%d b=%d\n", a, b);
a = a + b; //a=13
b = a - b; //b=5
a = a - b; //a=8
printf("交换后:a=%d b=%d\n", a, b);
return 0;
}
注意:此方法有一个弊端就是当我们a和b的数字比较大时,a+b可能超过int的最大范围
升级思路二:
1:按位异或操作符:对应的两个整数二进制位上,相同为0,相异为1.
2:思路图示如下:
步骤一:
步骤二:
步骤三:
3:上代码(运用按位异或操作符**^**)
#include<stdio.h>
int main()
{
int a = 5;
int b = 8;
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);
return 0;
}