写在前面:加法在测试时遇到了一个问题,用python在算-4+8时,会无限循环
我打印了每一次的sum和carry,原来是carry会越来越大
到后面会非常大
但是我试了下C++发现是可以计算的,它溢出后会变成4+0
1、加法
def add(a, b): # 递归if b==0:return asum = a ^ b # 异或得到两数之和carry = (a & b) << 1 # 与得到进位,左移后与sum相加return add(sum, carry)def add(a, b): # 非递归sum = 0carry = 0while b:sum = a ^ bcarry = (a & b) << 1a = sumb = carryreturn a
2、减法
def sub(a, b):return add(a, add(~b,1))
3、乘法
def mul(a, b):flag = True if (a^b)>=0 else False # 同号时flag为Trueif a<0:a = add(~a, 1)if b<0:b = add(~b, 1)res = 0while b:if b&1: res = add(res, a)a <<= 1b >>= 1return res if flag else add(~res,1)
4、除法
def div(a, b):flag = True if (a^b)>=0 else False # 同号时flag为Trueif a<0:a = add(~a, 1)if b<0:b = add(~b, 1)res = 0for i in range(31, -1, -1):if a>=(b<<i):res = add(res, 1<<i)a = sub(a, b<<i)return res if flag else add(~res,1)