用异或运算符实现不用第三个临时变量交换两个变量的值

一般我们在编程时要实现两个变量值的交换,都会借助于一个临时变量

 

但有没有一种方法可以不要临时变量呢?

我们先熟悉一下异或运算法则:

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

 

 

 

转载于:https://www.cnblogs.com/qmlm8844/archive/2012/11/19/2776766.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值