Skip to content

Latest commit

 

History

History
27 lines (21 loc) · 664 Bytes

README.md

File metadata and controls

27 lines (21 loc) · 664 Bytes

题目

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

示例:

若 a = 1 ,b = 2,返回 3。

解答

两个数异或(^)可以得到两数二进制对应位为0和1相加的结果,但是所有1和1会得到0,因此再对两数做与(&)操作然后左移1位(<<),即是得到所有的进位。因此得到两个新的数,对这两个新的数重复上述步骤直到没有进位

class Solution {
public:
    int getSum(int a, int b) {
        int tp = (a & b) << 1;
        a = a ^ b,b = tp;
        while(b){
            tp = (a & b) << 1;
            a = a ^ b;
            b = tp;
        }
        return a;
    }
};