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

2023-12-24 12:35:23

链接: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 以后,就代表得到了最终的值

文章来源:https://blog.csdn.net/q322359/article/details/135179640
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。