描述
给出两个整数 a 和 b , 求他们的和。
说明
a和b都是 32位 整数么?
- 是的
我可以使用位运算符么?
- 当然可以
思路
考虑特殊情况:a或b中至少有一个为0:输出b或a的值。
不使用 ‘+’ ,考虑使用位运算符,如:
异或 ^ :不进位加
与 & 、取反 ~ 等位运算符。
注意
32位整数,最高位(第31位)为符号位,1为负数,0为正数。
0-30位:对应的数位
负数在计算机中的存储方式:补码 (除了符号位,按位取反再加1)
所以,32位整数在计算机中的最大正数为0x 7fff ffff,大于该数的,就是负数。
```python
class Solution:
def aplusb(self, a, b):
while b:
result = (a ^ b) & 0xffffffff
carry = ((a & b) << 1) & 0xffffffff
a = result
b = carry
if a <= 0x7fffffff:
result = a
else:
result = ~(a^0xffffffff)
return result