不用任何操作符实现两个正整数相加

首先,既然不能够用操作符,那我们只能使用位操作来进行。对于位操作有&、|、^、<<、>>这5种操作。那问题是如何能够用这3种操作来实现两个数据的相加呢?

在具体操作前,我们先来看看10进制数的相加过程,比如对于“283+969”这个加法操作,一般是从低位往高位进行操作,并且如果两个数字加起来超过10了,则需要进1。那么其实这个操作可以分为三步进行:
1.不考虑进为,对每个对应位上的数据直接相加,可以得到“142”;
2.只考虑进位,这千位、百位、十位、个位上的进位分别为“1110”;
3.将第一步和第二步的数字“142”、“1110”重复第1步和第2步,直到所有位数上的进位全部为0为止,这样就得到最后的结果:“1252”

现在考虑二进制,同样可以将二进制按上述三个步骤进行分解:
1.不考虑进位,
   要得到每一位上的和值,可以采用异或(^)操作
2.只考虑进位,
   当第i位两个数均为1时,这第i+1位就需要进1位,因此要得到进位信息则要采用:与(&) => 左移(<<)
3.将第一步和第二步得到的结果重复进行第1和第2步即可,直到没有进位信息,最终的值即为两个数据的和。

由于代码比较简单,在此略过。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值