classSolution { public: intgetSum(int a, int b){ if (abs(a) < abs(b)) { returngetSum(b, a); } int res = 0; if (a * b < 0) { // the problem becomes a - b int borrow = 0, x = abs(a), y = abs(b), index = 0; while (x) { int bitX = x % 2; int bitY = y % 2; int bit = bitX ^ bitY ^ borrow; res |= bit << index++; if ((bitX < bitY) || (bitX == bitY && borrow)) { borrow = 1; } else { borrow = 0; } x >>= 1; y >>= 1; } if (a < 0) { res *= -1; } } else { // the problem becomes a + b int carry = 0, x = abs(a), y = abs(b), index = 0; while (x || carry) { int bitX = x % 2; int bitY = y % 2; int bit = bitX ^ bitY ^ carry; res |= bit << index++; if ((bitX && bitY) || (bitX && carry) || (bitY && carry)) { carry = 1; } else { carry = 0; } x >>= 1; y >>= 1; } if (a < 0) { res *= -1; } } return res;