前言:
在C语言基础中a与b两个数字相互交换的问题经常遇到,平常的做法都是定义第三个变量用做临时存储。这种做法最常见也最简单。本篇文章浅谈一下如果不用第三个变量,如何实现a和b的交换。
思考
首先定义两个变量:
int a = 10;
int b = 20;
如何不用第三个变量将这两个数字完成交换
方法1:
通过加减法的方式进行实现。
代码如下:
a = a + b; //30 20
b = a - b; //30 10
a = a - b; //20 10
但是这种方式是有风险的,当数据大的时候会导致数据溢出。
方法二 :
通过三次异或实现两数交换。
a = a ^ b;
b = a ^ b;
a = a ^ b;
思路:
异或:不同为1,相同为0
此时需将两个数字变为二进制:
a : 0000 1010
b : 0001 0100
(1)a = a ^ b;第一次异或时,a 变成了 0001 1110;
a = a ^ b;
a : 0001 1110
(2)b = a ^ b;第二次异或时,b变成了0000 1010,即为10;
b = a ^ b;
b : 0000 1010 --->10
(3)a = a ^ b;第三次异或时,a变成了0001 0100 ,即为20;
a = a ^ b;
a : 0001 0100 --->20
结论:
通过上述两种办法都可以在不使用第三个变量的前提下,实现a,b两个数的交换。方法一与方法二比起来有所缺陷,并不常用。三次异或实现交换即方便也安全,可实现我们的需求。