1

我收到以下提示:

创建一个函数: 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]

关于我做错了什么或如何解决这个问题的任何想法?

4

1 回答 1

1

您有一个半加法器,您需要从中构造一个全加器,然后将输入列表中的每个元素的多个调用链接在一起,再加上前面项目的进位。

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

于 2012-10-16T22:13:23.503 回答