1
我试图用+符号添加两个整数。我得到的想法是,无进位总和可以计算为a^b,并且进位可以计算为(a & b)< < 1. 0x7FFFFFFF是32位整数的最大值,但是掩码是做什么的?为什么carry和a必须在每次迭代中使用MASK进行修改?当结果大于MAX_INT时,〜((a & MAX_INT)^ MAX_INT)是做什么的?用位操作添加2个整数
def get_sum(a,b):
MAX_INT = 0x7FFFFFFF
MASK = 0x100000000
while b:
carry = ((a&b) << 1) % MASK
a = (a^b) % MASK
b = carry
if a <= MAX_INT:
return a
else:
return ~((a & MAX_INT)^MAX_INT)