371. Sum of Two Integers - jiejackyzhang/leetcode-note GitHub Wiki

Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.

Example:

Given a = 1 and b = 2, return 3.

位操作题目。

设a = 1, b = 3, 即a = 0001, b = 0011

进位:carry = a & b = 0001

非进位相加,赋值给a,'^'为xor:a = a ^ b = 0010

将进位赋值给b:b = carry << 1

循环相加,直到b为0,即无进位。

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