/**
* 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);
}
}