我收到了以下提示:
创建一个函数: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]
关于我做错了什么,或者如何处理这个问题的任何想法?
答案 0 :(得分:1)
你有一个半加法器,你需要从那些构造full adder,然后将多个调用链接到输入列表中的每个元素,再加上前面项目的进位。
通过使用ripple-carry技术完成链接,从前一组项目中获取“进位”输出并将其作为第三个输入提供。