Skip to content

Commit 82f5116

Browse files
committed
add 371
1 parent 17ded3d commit 82f5116

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

371.sum-of-two-integers.py

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution:
2+
def getSum(self, a, b):
3+
"""
4+
:type a: int
5+
:type b: int
6+
:rtype: int
7+
"""
8+
# python中一直左移是不会溢出的,所以要手动模拟32位int型
9+
MAX_INT = 0x7FFFFFFF
10+
MIN_INT = MAX_INT + 1
11+
MASK = 0x100000000
12+
while b != 0:
13+
carry = (a & b) << 1 # 表示进位
14+
a = (a ^ b) % MASK # 对其取余则将范围限制在[0,2^32-1]内,也就是int的范围
15+
b = carry % MASK # 同理
16+
# 如果小于MAX_INT就不用处理了,如果溢出就要:
17+
# 以4位bit为例,从0000-1111,可以表示的范围为[0,15],如果计算出16那就是溢出了,
18+
# 16是10000,此时的MIN_4BIT为16,取余为0,0000异或1111为1111再取反就是0了,
19+
# 将范围限制在了4位bit的范围内
20+
return a if a <= MAX_INT else ~((a % MIN_INT) ^ MAX_INT)
21+
22+
if __name__ == '__main__':
23+
a = -1
24+
b = 1
25+
print(Solution().getSum(a, b))

0 commit comments

Comments
 (0)