1.通过两变量之间相加减交换值。(如果int值过大,可能存在溢出问题)
#include<stdio.h>
int main()
{
int a=1;
int b=2;
printf("交换前:a=%d,b=%d\n",a,b);
a=a+b;//a变为两项之和,b没变
b=a-b;//b得到原来的a
a=a-b;//a得到原来的b
printf("交换后:a=%d,b=%d",a,b);
return 0;
}
2.通过位异或(^)办法交换值。(不会溢出)
^ ——按(二进制)位异或,相同为0,不同为1。(异或异为真)
二进制中a=01,b=10,每位进行异或比较,得到结果。
#include<stdio.h>
int main()
{
int a=1;//a=01
int b=2;//b=10
printf("交换前:a=%d,b=%d\n",a,b);
a=a^b;//a=11
b=a^b;//b=01
a=a^b;//a=10
printf("交换后:a=%d,b=%d",a,b);
return 0;
}
一般情况下会使用第三个变量的方法交换两变量的值,代码可读性高,执行效率高;异或操作可读性差,执行效率低于其他方法!