两整数之和
思路 位运算根据题目要求不得使用 、-运算符 所以采用位运算来代替。位运算中的两数加法 其实就四种
0 0 0
0 1 1
1 0 1
1 1 0(进位1)
其实与异或运算结果十分相似 唯一的区别在于异或运算没有进位加法。因此要得到最终结果 还需要找到进位的数 把这二者相加。在位运算中 可以使用与操作获得进位 但是这时需要将与运算的结果左移一位 才是所要的进位结果。
因为在python中 整数不是32位的 所以一直循环左移不会存在溢出的现象 需要手动对python中的整数进行处理 手动模拟32位整型。具体来说 就是将整数对0x100000000取模 保证该数从32位开始到最高位都是0。
class Solution: def getSum(self, a: int, b: int) - int: # 2**32 MASK 0x100000000 # 整型最大值 MAX_INT 0x7FFFFFFF MIN_INT MAX_INT 1 while b ! 0: # 计算进位 carry (a b) 1 # 取余范围限制在[0, 2**32-1]范围内 a (a ^ b) % MASK b carry % MASK return a if a MAX_INT else ~((a % MIN_INT) ^ MAX_INT) # return sum([a, b])
当然 也可以用sum()方法求解。
return sum([a, b])



