Python LintCode:A + B问题,最详原理

Python LintCode:A + B问题,最详原理

概述

该题中要求不使用加法运算符,那么我们就需要思考"+"运算符是如何实现的,我们先看在数电中加法是如何实现的,如下图所示(半加器结构)。
加法器,由一个异或门和与门组成

可以看出,加法器由一个异或门(上) 和一个与门(下) 组成,S为计算和,C为计算中产生的进位。那么这个时候我们就需要考虑使用位运算来完成上述题目。
我们举一个实际的例子来说明(假设用一个byte存储整数):2 + 9

2 + 9(对应于A + B)
2对应的二进制可以表示为0000 0010
9对应的二进制可以表示为0000 1001

正常情况下,我们在做加法的时候,对应位相加,如果有进位则加上进位,计算出最终结果时进位为0。
①对于2 + 9,我们先考虑无进位加法,个位相加和2 + 9 = 1,所以S = 1, 只考虑进位加法:2 + 9 个位产生了进位,所以进位1在十位,个位为0,即C = 10。以此方法可以推广到更高位。
②此时,我们让A = S,B = C,再次计算,个位相加为1 + 0为1,十位相加为0 + 1为1,所以最终结果为11,因为个位和十位均无进位产生,所以C = 0。

我们再举一个实际的例子来说明(十进制数):29 + 73

29 + 73(对应于A + B)
29对应的二进制可以表示为0001 1101
73对应的二进制可以表示为0100 1001

①对于29 + 73,我们先考虑无进位加法,个位相加和9 + 3 = 2,十位相加为2 + 7 = 9,所以S = 92, 只考虑进位加法:9 + 3 个位产生了进位,十位2 + 7并无进位产生,所以C = 10。
②此时,我们让A = S,B = C,再次计算,个位相加为2 + 0为2,十位相加为9 + 1为0,所以最终结果为2,十位产生了进位,所以C = 100。
③再次令A = S,B = C,再次计算,个位相加为2 + 0,十位为0,百位为1,最终结果S = 102,各个位均无进位产生。所以C = 0,此时结束计算,最终结果即为102。
通过上面两个例子可以知道,只要C不为0时

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值