LeetCode 371两数之和

题目描述:

不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。

思路:

既然不能使用运算符操作就要考虑到,位运算的加法。

加法有进位的时候和不进位的时候。

位运算既是0 和 1,

0+0=0;0+1=1;1+0=1;1+1=0(需要进位);

这不就是 异或操作嘛,相同为0,不同为1 例如:5+4

  0101

+0100

=1001(9)

这时,我们发现异或只能判断到最高位以下,我们需要获取到进位的数的位置,当遇到两个1就进位,所以进行 “与” 运算,再左移1位就是进位。当遇到最高位是 0 时,就可以直接返回,(这时已经不用再进位了)

代码如下:

 public int getSum(int a,int b){
        while(b!=0){//直到进位是0 结束循环
            int j = a ^ b;//异或 取非进位的值 (异或,相同位为0,不同位是1)
            int s = (a & b) << 1;//先 与 获取进位后的一位数,再左移一位,相当于进位 (与,全真才真,有假则假)
            a = j;
            b = s;
        }

        return a;

    }

 

posted on 2019-07-20 10:44  青山是谁  阅读(23)  评论(0编辑  收藏  举报