gpt4 book ai didi

python - 在python中实现8位加法器

转载 作者:行者123 更新时间:2023-12-04 10:21:17 25 4
gpt4 key购买 nike

我在 python 中实现了一个 8 位加法器,如下所示:

from gates import AND, OR, XOR
from utils import number_to_binary, binary_to_number

def EightBitAdder(s1='110101', s2='00010', carry_in=0):
# Limit to 8 bits
s1 = s1[-8:].zfill(8)
s2 = s2[-8:].zfill(8)
s_out = ''
carry_out = None
for i in range(8):
bit_1 = int(s1[8-1-i])
bit_2 = int(s2[8-1-i])
carry_in = carry_out if (carry_out is not None) else carry_in
value_out = XOR(carry_in, XOR(bit_1, bit_2))
carry_out = OR(AND(bit_1, bit_2), AND(bit_1, carry_in), AND(bit_2, carry_in))
s_out = str(int(value_out)) + s_out
print (" %s (%s) \n+ %s (%s) \n= %s (%s) -- Carry %s" % (s1, binary_to_number(s1), s2, binary_to_number(s2), s_out, binary_to_number(s_out), int(carry_in)))
return (s_out, int(carry_out))

对我来说最引人注目的是“门”会懒惰地评估,所以它不会返回 1/0,除非我调用 int() ,而且似乎 8 位加法器中有大量的门。例如:

enter image description here

我是不是在进位/值输出评估中的某处(或冗余)犯了错误,或者一个基本的 8 位纹波加法器真的有这么多门吗?

最佳答案

在真正的加法器中,门连接成一个图形,其中一个门的输出可以用作其他几个门的输入。

您将输出编写为表达式,其中门的输出只能在一个地方使用。

这是通过将每个输出的整个表达式复制到所有使用它的地方来实现的。您在每次迭代中都这样做 -- carry_in使用一次以产生值,使用 3 次以产生下一个进位。

进位表达式的大小在每次迭代中都乘以 3,从而导致您使用的运算符数量呈指数级增长。

您可能应该以可以保留门图的不同形式生成输出,例如静态单一分配:https://en.wikipedia.org/wiki/Static_single_assignment_form

关于python - 在python中实现8位加法器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60837888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com