-
不用临时变量,交换两个数的值
2009-04-19 16:15:01 by deepblue有两个整型变量a,b,如何在不使用其他临时变量的情况下交换a,b的值?可能这个问题大家都非常熟悉了吧。
以前我用的是这个方法:
a=a+b;
b=a-b;
a=a-b;其实下面这种方法由于是用的位运算,因此效率更高:
a=a^b; (1)
b=b^a; (2)
a=a^b; (3)其中,^为位运算的异或运算。证明这个结论也很简单,为了表述得清楚,我们令原始值分别为a,b,计算过程中产生的新值为a_new,b_new。
由(1)得:a_new=a^b,即此时变量a中的值等于a_new。而(2)中,等式右边的a的值实际上已经等于a_new了,因此,由(2)得b_new=b^a_new=b^a^b。我们知道,异或运算满足交换律和结合律,因此进一步可以得到:b_new=b^a_new=b^a^b=b^b^a=0^a=a,即变量b的值变成了b_new,也就是变量a的原始值。在(3)中,等式左边变量a和b的值实际上已经等于a_new和b_new了,令等式左边的a为a_final,因此可以得到a_fianl=a_new^b_new=a^b^a=a^a^b=0^b=b,即变量a的值最终等于a_final,也就是变量b的原始值。至此,变量a,b的原始值完成了交换。
随机文章:
Catalan数 2009-04-15Java字符串split方法的小陷阱 2009-07-29中文分词与词性标注测评程序 2009-07-21Google Developer Day 2009 2009-06-06Linux高级权限管理:ACL用法简介 2009-03-18
收藏到:Del.icio.us






评论
>>> a, b = 1, 2
>>> a, b = b, a
>>> a
2
>>> b
1