??欢迎大家来到Celia的博客??
🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉
所属专栏:C语言
? 我们在编写程序时,经常会需要交换两个变量的值,本篇文章将会介绍三种交换变量的方法。
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
int c;
printf("交换前的值分别为a = %d,b = %d\n", a, b);
c = a;//c = a = 3
a = b;//a = b = 5
b = c;//b = c = 3
printf("交换后的值分别为a = %d,b = %d\n", a, b);
}
顾名思义,这种方法需要创建一个额外的变量来暂时存储其中一个变量的值,具体过程为:
- 将a的值赋值给c
- 将b的值赋值给a
- 将c中的值(a的值)赋值给b
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
printf("交换前的值分别为a = %d,b = %d\n", a, b);
a = a + b;//a = 8
b = a - b;//b = 8 - 5 = 3
a = a - b;//a = 8 - 3 = 5
printf("交换后的值分别为a = %d,b = %d\n", a, b);
}
这种方法不需要创建额外的变量,但当a+b的值超过变量的最大存储范围时,这种方法就不再适用了。
#include<stdio.h>
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);
}
按位异或(^):用二进制形式对比两个变量的每一位,如果不同则为1,如果相同则为0。
例如:2 :0010
? ? ? ? ? ?3 :0011
? ? ? ?2^3 :0001
我们很容易就可以推测出:b^b = 0,b^0 = b
我们再来看一下上面的例子:
- a = a ^ b
- b = a ^ b? ? 可以看成 b = a^b = a^b^b = a^0 = a (将第一步带入第二步)
- a = a ^ b? ? 可以看成 a = a^b = a^a^b = 0^b = b (将第二步带入第三步)
? 这三种方法都可以交换两个变量的值,但运用加减法有可能导致变量值的溢出,另外两种就运行效率而言,创建额外变量的方法效率是最高的,可读性也是最高的,大家可自行斟酌~