python 位运算实现加减乘除四则运算

写在前面:加法在测试时遇到了一个问题,用python在算-4+8时,会无限循环
我打印了每一次的sum和carry,原来是carry会越来越大
python 位运算实现加减乘除四则运算_第1张图片
到后面会非常大
python 位运算实现加减乘除四则运算_第2张图片
但是我试了下C++发现是可以计算的,它溢出后会变成4+0
python 位运算实现加减乘除四则运算_第3张图片

1、加法

def add(a, b):  # 递归
    if b==0:
        return a
    sum = a ^ b  # 异或得到两数之和
    carry = (a & b) << 1  # 与得到进位,左移后与sum相加
    return add(sum, carry)

def add(a, b):  # 非递归
    sum = 0
    carry = 0
    while b:
        sum = a ^ b
        carry = (a & b) << 1
        a = sum
        b = carry
    return 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为True
    if a<0:
        a = add(~a, 1)
    if b<0:
        b = add(~b, 1)
    res = 0
    while b:
        if b&1: 
            res = add(res, a)
        a <<= 1
        b >>= 1
    return res if flag else add(~res,1)

4、除法

def div(a, b):
    flag = True if (a^b)>=0 else False  # 同号时flag为True
    if a<0:
        a = add(~a, 1)
    if b<0:
        b = add(~b, 1)
    res = 0
    for 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)

你可能感兴趣的:(算法与数据结构)