第一种方案:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 10, b = 20;
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);
return 0;
}
这里运行结果为:
这种方式具有一定的问题:因为采用了整型数据的加法,所以在进行较大数值的交换过程中容易出现数值过大从而溢出的现象。
第二种方案:
采用按位异或的运算:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 10, b = 20;
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);
return 0;
}
解释^交换原理:
我们可知,按位异或的规则是相同为0,相异为1。
举例说明 :
a ^ a = 0
a ^ 0 = a
3 ^ 3 ^ 5 = 5
3 ^ 5 ^ 3 = 5
(3的补码: ……011
5的补码:……101
3 ^ 5:……110
3 ^ 5 ^ 3 : 101 )
由上分析得,按位异或满足交换律。
下面分析代码:
a = a ^ b
b = a ^ b(将a = a ^ b带入到式中,可得b = a ^ b ^ b 结果就为a)
a = a ^ b(将a = a ^ b带入式中,此时又有b = a,所以得出a = a ^ b ^ a结果为b )
最终起到了交换的效果。