简单算法分析:位运算求a+b的和

本文通过一个简单的算法问题,探讨如何使用位运算求两个整数a和b的和。文章详细分析了位运算的过程,包括需要进位的情况、位移操作以及如何保存每次位移的结果。作者指出,a & b用于确定进位位置,a ^ b用于获取未进位的余数,并通过循环和位移操作完成计算。最后,提供了带有注解的Python代码实现。
摘要由CSDN通过智能技术生成

位运算求a+b的和

今天无意中刷到这么个问题,代码如何书写网上已经非常多了,都只是说了位运算符等这些基础的操作,但是并没有很清楚说明代码为什么要这么写,(如果不清楚位运算的需要先百度一下位运算符)这里只针对这道题目梳理一下自己对这个问题的思考与想法

假设需要使用位运算符计算两个整数的和那么我们先用常规的计算方式试着计算一下:
假设 :a = 77,b = 55

那么将上面两个数转换成二进制,为了方便计算我们就将长度设置成8位如下:
a:0100 1101
b:0011 0111

常规的计算方式每位对其相加: 1 + 1 = 10(需要进1位), 0 +1 = 1,0 + 0 = 0

为了观察方便我们画一个表格查看

128 64 32 16 8 4 2 1
a 0 1 0 0 1 1 0 1
b 0 0 1 1 0 1 1 1
过程1 1 需进位
过程2 1 需进位
过程3 1 需进位
过程4 1 需进位 余1
过程5 1 需进位 余1
过程6 1 需进位 余1
过程7 1 需进位 余1
结果 1 0 0 0 0 1 0 0

因为是2进制,在这个计算过程中我们发现了一些规律
1.整个计算过程中我们需要知道哪些位运算相加需要进位(需要&运算)
2.整个计算中过程1~7明显需要循环且发生位移(需要while循环且需要<<运算符)
3.需要保存每次位移的结果

这里我们就会想到需要a & b的运算从而得到些地方需要进位如下表所示:

a 0 1 0 0 1 1 0 1
b 0 0 1 1 0 1 1 1
a&b 0 0 0 0 0 1 0 1

这里我们可以看到整个循环过程中这两个地方是一定会发生进位的我们先标记出来,然后我们在往下看,除了需要进位的地方外我们发现还有一些地方因为发生了进位但是还会有余数的地方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值