阿林说:“点赞收藏加关注,下次更新不迷路!”
目录
1.创建第三个变量法(常用方法)
以第三个变量为中间值,通过赋值,交换两个变量的数据:
tmp = a; //将a赋值给tmp
a = b; //将b复制给a
b = tmp; //将tmp中的a赋值给b
#include<stdio.h>
int main()
{
int a = 1;
int b = 5;
printf("交换前a=%d b=%d\n", a, b);
int tmp = 0;
tmp = a;
a = b;
b = tmp;
printf("交换后a=%d b=%d\n", a, b);
return 0;
}
运行结果:
2. 不创建第三个变量
2.1 通过加减法交换数据
a = a + b;
b = a - b; //实际上就是b = a
a = a - b; //实际上就是a = b
上代码:
#include<stdio.h>
int main()
{
int a = 1;
int b = 2;
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;
}
运行结果:
但是,这种方法的数据取值范围有限制,a + b的和不能超过int类型的最大值,
那,有没有更好的方法呢?有!
2.2通过按位异或进行运算
按位异或 ^ 是对二进制的补码进行处理,现在只需要知道 a ^ 0 = a 和 a ^ a = 0就足够了
a = a ^ b;
b = a ^ b; //其实就是b = a ^ b ^ b,即 b = a ^ 0; b = a;a = a ^ b;
a = a ^ b; //即a = a ^ b ^ a,a = 0 ^ b,a = b
这样就实现了a和b的交换数据
#include<stdio.h>
int main()
{
int a = 2;
int b = 3;
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;
}
运行结果: