两个数字交换而不用第三个值
本idea源于TCL面试题目,设有a,b两个值,交换他们,不得借助第三个值
法1:借助加法(减法也行)
求得a+b的和sum,当然这里sum我不是想设立第三个值sum,是直接赋给a,然后b=a-b,a=a-b;
int a,b;
a=a+b;
b=a-b;
a=a-b;
至此,完成数据的交换,是不是很神奇???哈哈哈。它把和存储在a,而b=a-b意味着“和-b”其结果就是a,也就是b=a;那么自然a=a-b意味着“和-a”也就是a=b;完成交换了。看不懂我的话看代码酝酿一下肯定就懂了。同样的道理借助减法,原理一样。
法2:异或方法
什么是异或呢?a⊕b=ab'+a'b,有下列公式
a⊕a=aa'+a'a=1,a⊕1=a0+a1=a
C语言中异或的符号为^,代码如下
int a,b;
a=a^b;
b=a^b;
a=a^b;
第二步中的b=a^b=a^b^b=a^1=a;
第三步中的a=a^b=a^b^a=b^1=b;
至此,完成数据的交换,这个更加神奇,学过数字电路或者数字逻辑或者微机原理的人会更加明白一些,如果不懂,需要学习一些二进制的逻辑运算就会明白了。