如果要交换两个变量的值,我们首先想到的就是定义一个第三方变量暂存其中一个变量的值:
如果我们不使用第三方变量怎么交换两个变量的值呢?
1.利用两数之和减去另一个数的方式:
这样也能成功交换两个数的值,但这种方法,如果两个数很大,可能会超出类型范围,造成数据丢失精度。所以不常用。
2.利用位运算 ^ (异或):
异或的特点是:一个数据a与另一个数据b做异或运算之后,变成了另外一个数c,再读取这个数据就不是原来的数据了,我们如果再拿这个数据c和数据b异或一次,这个数据又变回原来的数据a。
即:a^b^b=a; a^b^a=b
所以我们可以利用这个特点交换两个数据:
异或运算不会产生进位,所以不会造成数据损失,并且异或运算是二进制之间的运算,效率也比较高,但是这种交换方式阅读性差。所以还是定义第三方变量比较常用