不赞成进位的二进制加法

Binary addition which disapproves carrying

我目前正在使用二进制加法,如果有进位,returns False。我当前的代码是:

def binaryadd(one, other):
    str_1, str_2 = str(one), str(other)
    for a,b in zip(str_1[::-1], str_2[::-1]):
        if a == b == '1':
            return False
    return int(bin(rev_bin(one) + rev_bin(other))[2:])

所以 10111 + 1000 会 return 11111,10110 + 1011 会 return 错误。我认为会有更有效的代码;例如另外检查溢出,但我想知道哪些代码可以做到这一点。有没有更好的方法呢?

从存在 "column" 的那一刻开始,两个操作数都有一个 1,因为在这种情况下我们 生成 一个进位。进位也可以传播,但前提是已经生成了进位。

我们可以用位与 (&) 来检查这一点。如果没有进位,我们可以按位或 (|):

def binaryadd(one, other):
    if <b>one & other</b>:
        return False
    return <b>one | other</b>

或单行:

def binaryadd(one, other):
    return not bool(one & other) and one | other