Sum of Two Integers
Problem: Sum of Two Integers
We can use XOR to get the sum without carries and use AND << 1 to get the carries and then sum them up together. Since in Python, integers can be longer than 32 bits and the symbol bit is not on the correct position, we need to use a mask to get what we want.
Code in Python:
class Solution(object):
def getSum(self, a, b):
"""
:type a: int
:type b: int
:rtype: int
"""
# 32 bits integer max
MAX = 0x7FFFFFFF
# 32 bits interger min
MIN = 0x80000000
# mask to get last 32 bits
mask = 0xFFFFFFFF
while b != 0:
# ^ get different bits and & gets double 1s, << moves carry
a, b = (a ^ b) & mask, ((a & b) << 1) & mask
# if a is negative, get a's 32 bits complement positive first
# then get 32-bit positive's Python complement negative
return a if a <= MAX else ~(a ^ mask)