/**
 * Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.
 * <p>
 * Example:
 * Given a = 1 and b = 2, return 3.
 * <p>
 * Tags: Bit Manipulation
 * Similar Problems: (M) Add Two Numbers
 */
public class SumOfTwoIntegers {

    /**
     * For example, a = 0001, b = 0011.
     * First, we can use "and"("&") operation between a and b to find a carry.
     * carry = a & b, then carry = 0001
     * Second, we can use "xor" ("^") operation between a and b to find the different bit, and assign it to a.
     * Then, we shift carry one position left and assign it to b, b = 0010.
     * Iterate until there is no carry (or b == 0)
     */
    public int getSum(int a, int b) {
        if (b == 0) return a;

        while (b != 0) {
            int carry = a & b;
            a = a ^ b;
            b = carry << 1;
        }

        return a;
    }

    public int getSumRecursive(int a, int b) {
        if (b == 0) return a;
        return getSumRecursive(a ^ b, (a & b) << 1);
    }

}

add Sum Of Two Integers