想要交换两个数,最简单的方式就是创建一个临时变量实现数的交换。
可咱就是不走寻常路,下面介绍不创建临时变量实现数的交换:
定义两个整形变量:
int a = 4;
int b = 5;
法一:
#include<stdio.h>
int main()
{
int a = 4;
int b = 5;
printf("交换前:a=%d,b=%d\n",a,b);
a = a + b;
b = a - b; //a + b - b = a
a = a - b; //a + b - a = b
printf("交换后:a=%d,b=%d\n", a, b);
return 0;
}
此方法有缺陷:会有栈溢出的风险。
法二:
此方法要用到位运算符(这里只介绍"^"(按位异或)):
"^"(按位异或) : 对应补码的二进制位数,相同为0,不同为1,那么a ^ a = 0 , 0 ^ a = a。
int main()
{
int a = 4;
int b = 5;
printf("交换前:a=%d,b=%d\n", a, b);
a = a ^ b;
b = a ^ b; // a ^ b ^ b = a
a = a ^ b; // a ^ b ^ a = b
printf("交换后:a=%d,b=%d\n", a, b);
return 0;
}
如果变量为浮点类型,只能老老实实用创建临时变量实现!