一共介绍3中方法
以3和5为例
法1:
最简单的思路就是创建临时变量,通过这个中间变量来交换
代码:
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = 0;//空瓶
printf("交换前:a=%d b=%d\n", a, b);
c = a;
a = b;
b = c;
printf("交换后:a=%d b=%d\n", a, b);
return 0;
}
法2:
不创建临时变量,通过两个变量的+-实现
代码:
int main()
{
int a = 3;
int 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);
return 0;
}
但是一旦数字过大会存在溢出的问题
法3:位操作符
这里先写介绍一下,因为这种方法并不常见
关于^的一些规则
3^3=0 -> a^a=0
011
011
000
0^5=5 -> a^0=a
000
101
101
3^3^5 = 5
3^5^3 = 5
异或操作符支持交换律
011
101
110
011
代码如下:
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
printf("交换前:a=%d b=%d\n", a, b);
a=a^b; //3^5
b=a^b; //3^5^5 ---> b=3
a=a^b; //3^5^3 ---> a=5
printf("交换后:a=%d b=%d\n", a, b);
return 0;
}