两个数字交换不用第三个值(法1:用加法运算,法2:用异或运算)

9 篇文章 0 订阅

两个数字交换而不用第三个值

本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;

至此,完成数据的交换,这个更加神奇,学过数字电路或者数字逻辑或者微机原理的人会更加明白一些,如果不懂,需要学习一些二进制的逻辑运算就会明白了。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值