这里,我总结两种不用临时变量实现两数的交换。
一.加减
第一种,我们可以通过求两数之和之后再相减实现。请看代码实现:
#include <stdio.h>
int main()
{
int m = 0, n = 0;
scanf("%d%d", &m, &n);
printf("交换前m=%d,n=%d\n", m, n);
m = m + n;
n = m - n;
m = m - n;
printf("交换后m=%d,n=%d", m, n);
return 0;
}
但是这种方法容易造成溢出。
二.^(按位异或)
我们可以通过通过三次按位异或来实现。请看代码:
#include <stdio.h>
int main()
{
int m = 0, n = 0;
scanf("%d%d", &m, &n);
printf("交换前m=%d,n=%d\n", m, n);
m = m ^ n;
n = m ^ n;
m = m ^ n;
printf("交换后m=%d,n=%d", m, n);
return 0;
}
这种方法虽然不会溢出,但是可读性差。
大家可以看到我们两种方法成功的实现了。
最后,介绍一下^这个操作符。
按位异或,“位”指的是二进制位,譬如3写为二进制形式是011,5写成二进制形式是101,按位异或的运算原则 是相同为0,相异为1.故3^5==110==6。
当然,我们一般都是使用临时变量来实现两者交换。