leetcode 371. 两整数之和(优质解法)

链接:371. 两整数之和

代码:

class Solution {
    public int getSum(int a, int b) {

        while(b!=0){
            int num=a^b;    //无进位值
            int bit=(a&b)<<1;   //进位

            a=num;
            b=bit;
        }

        return a;
    }
}

题解:

        要计算两个数相加并且不能使用 + - 号,一般就要采用位运算来解决该问题。

        ^ 异或被称为无进位相加,我们计算出异或的值再计算出进位的值即可,如 2 + 3,先计算无进位相加得到的值: 0010 ^ 0011= 0001。

        现在来推算一下如何得到 a,b 相加的进位:

a                0        1        0        1

b                0        0        1        1

进位           0        0        0        1

        由上面的推算可以看出,进位 = a & b ,所以 2 + 3 的进位为:0010 & 0011 = 0010,但是进位是加到前一位的,所以实际上此时得到的进位还需要 << 1 得到 0100

        让无进位相加得到的值和进位相加,便得到了结果,但是这里又涉及到了加法,就要用无进位相加得到的值和进位继续做上述的操作,所以这就是一个循环

        循环结束的条件就是进位变为 0 ,当进位变为 0 以后,就代表得到了最终的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小林想被监督学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值