交换两个变量的骚操作

版权声明:原创文章转载请注明来源。 https://blog.csdn.net/samll_snail/article/details/86559102

交换两个变量的值,我们常规做法是申请一个第三方变量,如果要求不能使用第三方变量,该怎么交换两变量呢?

今天介绍两种不依赖第三方变量的交换方法。

1、算术运算法

就是最基本的加减法,这里主要是利用了坐标思想。坐标轴上两个点,通过计算两点之间的距离来完成交换操作。大家可以参考下面这张坐标图来理解。

a = 5
b = 8

#计算a和b两个点到原点的距离之和
#并且赋值给a,这一步a的值已经发生变化
a = a+b

#使用距离之和减去b到原点的距离
#a-b 其实就是a的原值(a到原点的距离),现在赋值给了b
b = a-b

#再使用距离之和减去b (a到原点的距离)
#得到的是b的原值(b到原点的距离),现在赋值给了a
a = a-b

或者

a = 5
b = 8

#计算ab两点间的距离差,并赋值给a
a = b-a

#用b到原点的距离减去上一步得到的距离差
#即得出a到原点的距离,把a赋值给b
b = b-a

#再使用a到原点的距离(即现在b的值)加上第一步中的距离差
#得到b到原点的距离,把这个距离赋值给a
a = b+a

可能会有同学会问如果 a 或 b 有负数会不会影响结果,其实无论正负数都可以正确完成交换,因为在坐标上,我们计算的是距离,大家可以尝试把变量改成负数试试。

2、异或运算

在上一篇文章中,我们也有讲到使用异或运算找出数组中只出现一次的元素,在这里不再详细解释异或运算的具体操作了,下面直接给出具体实现过程。

a = 5
b = 8


#a 和 b 异或运算得到一个新值并赋值给 a
a = a^b

#再把这个新值和b做异或可以得出a的值,并赋值给b
b = a^b

#上一步中得到的其实是a的原值,再次把第一步中的新值和b做异或
#得到b的原值,赋值给a
a = a^b

a 和 b 异或运算得到另一个数 c,当 c 和其中一个值再做异或运算时,能得到另外一个的原值。比如当 c 再和 b 异或运算就能重新得到 a 的值。

猜你喜欢

转载自blog.csdn.net/samll_snail/article/details/86559102