LeetCode:位运算实现加法

本文介绍了一种利用位运算实现加法的方法。通过异或运算得到无进位的和,与运算得到进位值,再将进位左移后与当前的和进行异或运算,重复此过程直到没有进位为止。这种方法避免了使用传统的加法运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LeetCode:位运算实现加法

写在前面

位运算符

实现加法的思路

两个加数,比如5(101)和6(110),如何不用加法就能得出两者之和呢?

我们知道二进制计算中,如果使用异或将会产生无进位的两者之和,而两数相与将会产生进位值!!!

可这样又如何呢?

1 sum = 011
2 carry =1000

 两者继续异或将会产生

 结果就出现了,此时无进位,所以进位为0时,sum将会为最终结果!因为此时不需要进位,异或运算就是最终结果!

优质代码

1     public int getSum(int a, int b) {
2         while(b!=0)
3         {
4             int carry = a&b;
5             a=a^b;
6             b=carry<<1;
7         }
8         return a;
9     }

 参考链接

https://github.com/awangdev/LintCode/blob/master/Java/A%2BB.java

 

转载于:https://www.cnblogs.com/MrSaver/p/8370812.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值