用异或运算符实现不用第三个临时变量交换两个变量的值
一般我们在编程时要实现两个变量值的交换,都会借助于一个临时变量
但有没有一种方法可以不要临时变量呢?
我们先熟悉一下异或运算法则:
1. a ^ a = 0
2. a ^ b = b ^ a
3. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
4. d = a ^ b ^ c 可以推出 a = d ^ b ^ c.
5. a ^ b ^ a = b.
现在编程实现不要临时变量实现两个变量 m,n的交换。
m = m^n;
n = m^n;
m = m^n;
结束。
看不明白?或者怀疑有没有这么简单?
由异或运算法则可以知道:
m = m^n^n;
n = n^m^m;
上个例子中,
第二句 n = m^n,扩展开来就是:n = (m^n)^n,右边式子等于m;
第三句 m = m^n,扩展开来就是:m = (m^n)^m(本来是n,但是上一句中,n=m了),右边式子等于n;
异或运算还是神奇!
这有一篇博文探讨了用异或交换多个变量值的方法,当然也是不用临时变量了。
http://blog.csdn.net/lpt19832003/article/details/5334688