二进制添加两个布尔值列表

时间:2012-10-16 22:04:16

标签: python binary boolean

我收到了以下提示:

  

创建一个函数:BoolAdd(A,B),在列表上执行二进制加法   A和B(A和B具有相同的长度N)的布尔值并返回   两个元素的列表。第一个元素是溢出,这意味着   除非添加没有,否则返回值为FALSE   最初适合与A和B相同的长度列表。第二   输出列表的元素是布尔值的列表   对应于A和B的向量和。确保BOOL_ADD为   如此定义,无论为N选择的值如何,它都能正常工作。

我不确定如何执行二进制加法,然后将其转换为布尔值。我也不确定何时溢出会变为TRUE。在问题的早期,我们编写了以下HalfAdder函数:

def HalfAdder(A,B):
    S = int((A and not B) or (not A and B))
    C = int(A and B)
    return (S, C)

和FullAdder函数:

def FullAdder(A,B,C):
    AB = int((A and not B) or (not A and B))
    S = int((C and not AB) or (not C and AB))
    CAB = int(C and AB)
    C1 = int((A and B) or (CAB))
    return (S,C1)

其中任何一个都会被纳入吗?

到目前为止,这是我所拥有的,但它没有成功:

def BoolAdd(A,B):
    L = []
    overflow = False
    for i in range (0,len(A)):
            x = bin(A[i]+B[i])
            x = bool(x)
            L.append(x)
    if (len(L) > len(A)):
        overflow = True

    return [overflow, L]

关于我做错了什么,或者如何处理这个问题的任何想法?

1 个答案:

答案 0 :(得分:1)

你有一个半加法器,你需要从那些构造full adder,然后将多个调用链接到输入列表中的每个元素,再加上前面项目的进位。

通过使用ripple-carry技术完成链接,从前一组项目中获取“进位”输出并将其作为第三个输入提供。