用异或运算符实现不用第三个临时变量交换两个变量的值
2012-11-19 09:47
597 查看
一般我们在编程时要实现两个变量值的交换,都会借助于一个临时变量
但有没有一种方法可以不要临时变量呢?
我们先熟悉一下异或运算法则:
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
但有没有一种方法可以不要临时变量呢?
我们先熟悉一下异或运算法则:
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
相关文章推荐
- 不用临时变量实现两个变量的交换
- 不用临时变量 实现两个变量之间的数据交换
- 不用临时变量实现两个变量交换
- 不用临时变量交换两个数的值(C实现)
- 交换两个整数值,不用临时变量
- 不用第三个变量交换两个变量的值
- 剑指Offer(Java版):不用第三个变量就能交换两个变量值
- 怎样不用临时变量而交换两个值?
- 不用中间变量,实现两个变量的交换
- 通过异或运算实现两个变量的交换(不需借助第三个变量)
- 不使用第三个变量实现交换两个变量的值和<你的名字>
- 两个变量交换数字 不用第三个变量的情况下 int a = 5,b = 6
- (1.1.2)C的|、||、&、&&、异或、~、!运算 (交换两个值,不用临时变量)
- 怎样不用临时变量而交换两个值?
- 交换两个元素的值,不用临时变量
- 不用临时变量,交换两个变量的值
- 不用第三个变量实现a,b的值交换
- 交换两个值,而不用临时变量
- 【转】 不用中间变量,实现两个变量的交换
- 温故知新系列(二)交换两个变量的值不用第三个变量