[LeetCode] Sum of Two Integers

The code is as follows.

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

The above code may be rewritten to make it more readable.

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

c stands for the carry bit of adding two integers. The sum of two integers can be decomposed into a summation bit (a & b) and a carry bit (a ^ b). The << 1 is to set the carry bit to the correct bit. The above process is repeated until no carry (c, stored in b, becomes 0). Then the sum is stored in a.

posted @ 2016-09-10 21:47  jianchao-li  阅读(363)  评论(0编辑  收藏  举报