【问题标题】:Binary addition of two lists of boolean values两个布尔值列表的二进制加法
【发布时间】:2012-10-17 06:19:37
【问题描述】:

我收到以下提示:

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

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

【问题讨论】:

    标签: python binary boolean


    【解决方案1】:

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

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

    【讨论】:

    • 我也有一个完整的加法器。我会将它添加到原始问题中。但是,当我只是添加两个时,这不是添加 3 个二进制值吗?我将如何“将多个调用链接在一起”?
    • 您可以使用与链接相同的页面上ripple-carry adder 中描述的技术来执行此操作。您要添加的第三个值是每个列表中前一对项目的进位输出。
    • 那我怎么打第一个电话,因为我还没有carry?
    • 进位为 0 开始(因为从一开始就没有进位)。
    猜你喜欢
    • 1970-01-01
    • 2014-03-30
    • 2018-08-09
    • 2020-04-05
    • 2017-08-23
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 2014-11-30
    相关资源
    最近更新 更多