前言:
一般情况下,我们交换两个变量的值都会使用一个中间变量,这样的程序也更容易理解。
程序源码:
使用中间变量时,交换两个变量的值:
#include <stdio.h>
int main()
{
int a = 3;
int b = 5;
int tmp; //中间变量
printf("交换前:a = %d,b = %d\n",a,b);
tmp = a;
a = b;
b = tmp;
printf("交换后:a = %d,b = %d\n",a,b);
return 0;
}
程序运行结果:
不使用中间变量时,交换两个变量的值,加减法:
#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; //实际b = (a+b)-b = a;
a = a-b; //实际a = (a+b)-a = b;
printf("交换后:a = %d,b = %d\n",a,b);
return 0;
}
程序运行结果:
加减法的缺陷:
- 容易数值溢出,比如两个较大的值相加可能会超过int类型的数据范围。
- 程序的可读性差。
不使用中间变量,交换两个变量的值,异或法
异或法交换两个变量的值不存在数值溢出,但可读性差
//异或法,不会溢出
#include <stdio.h>
int main()
{
int a = 3;
int b = 5;
printf("交换前:a = %d,b = %d\n",a,b);
a = a^b;//a = 011^101 = 110
b = a^b;//b = 110^101 = 011
a = a^b;//a = 110^011 = 110
printf("交换后:a = %d,b = %d\n",a,b);
return 0;
}
程序运行结果:同上。。。
最后:
建议大家以后使用中间变量交换两变量的值,这样的程序可读性好,执行效率高。