python 不用加号实现整数加法运算

参考地址1:不用加号实现加法!(C++)
参考地址2:计算机组成原理——加法


直接上代码:

import numpy as np


def int_add2(a, b):
    a1 = np.int8(a)
    b1 = np.int8(b)
    if 0 == b1:
        return a1
    cor = a1 ^ b1
    cand = a1 & b1
    return add2(cor, cand << 1)

为了避免整形二进制位数过多导致递归过深,这里将整数限制为8位
举个例子解释一下,a+b可以分为三步来理解,比如a=3,b=2
1、a的二进制表示就是0000 0011, b的二进制是0000 0010,那么不考虑进位a+b的结果为0000 0001。
2、 只考虑进位,结果就是0000 0011+0000 0010=0000 0010
3、将该进位左移一位,变为0000 0100
4、将0000 0100再与0000 0001进行异或,得到0000 0101,即十进制下等于5
5、结束
另外,这个运算实际上是以补码形式进行的。正数的补码为本身,负数的补码等于原码取反码加一,然后按照同样的方式进行运算,手算了一下3 +(-2),结果正确,程序也对。(1000 0000,左移一位为0)

猜你喜欢

转载自blog.csdn.net/UESTC_V/article/details/80347931