Closed. This question is off-topic。它目前不接受答案。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
三年前关闭。
我很难通过半加器和全加器测试,我想知道我的逻辑在
代码如下:
因此,实现方式如下:
全加器
有几种方法可以构建一个完整的加法器,一种方法是使用两个半加法器,如我在digital electronics课程文本中所述(荷兰语,抱歉):
在a
所以这意味着:
一个普遍的建议是总是把一个问题分成更小的子问题,你可以更容易地控制。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
三年前关闭。
我很难通过半加器和全加器测试,我想知道我的逻辑在
FullAdder()
和HalfAdder()
方法中有什么问题?我的测试似乎都没有通过。。。代码如下:
# All wires that enter/exit the circuit need to be visible outside of the
# function: they are to be created in the enclosing scope and passed
# as parameters.
# However, wires that connect the AND gates to the OR gates are
# _internal wires_, visible only inside the circuit: they need to be created
xy = self.Wire('xy')
xz = self.Wire('xz')
yz = self.Wire('yz')
xy_or_xz = self.Wire('xy_or_xz')
self.AndGate(x, y, xy)
self.AndGate(x, z, xz)
self.Andgate(x, z, yz)
# OR(xy,xz,yz) = OR( OR(xy,xz), yz)
self.OrGate(xy, xz, xy_or_xz)
self.OrGate(xy_or_xz, yz, o)
return 'ok'
def TwoSwitches(self, x, y, o):
""" An example: light controlled by 2 switches (Rosen, 12.3, Example 3,
- Figure 6, p. 825)
F(x, y) = xy + !x.!y
"""
# Wires x, y, and o are passed as parameters.
# Only the internal wires need to be created:
xy = self.Wire('xy')
not_x = self.Wire('not_x')
not_y = self.Wire('not_y')
notx_noty = self.Wire('notx_noty')
self.AndGate(x,y,xy)
self.Inverter(x, not_x)
self.Inverter(y, not_y)
self.AndGate(not_x, not_y, notx_noty)
self.OrGate(xy, notx_noty, o)
return 'ok'
# This function needs to be defined: parameter, body definition
def HalfAdder(self, x, y, s, c):
notx_and_y=self.wire('notx_and_y')
x_and_noty=self.wire('x_and_noty')
cwire=self.wire('cwire')
allwire=self.wire(allwire)
self.OrGate(self.AndGate(not x,y,notx_and_y),self.AndGate(x,not y,x_and_noty),allwire)
cwire=self.AndGate(x,y,cwire)
c=cwire
s=allwire
pass
def FullAdder(self,x,y,c_i,s, c_out):
#TODO
pass
最佳答案
半加法器
半加法器可以使用AND-AND-XOR门实现:
x y
| |
|------------------\
| |--------\ |
+--------+ +--------+
| AND | | XOR |
+--------+ +--------+
| |
c s
因此,实现方式如下:
def Xor(self, x, y, xor):
nx = self.Wire('nx')
ny = self.Wire('ny')
self.Inverter(x,nx)
self.Inverter(x,ny)
a1 = self.Wire('a1')
a2 = self.Wire('a2')
self.AndGate(nx,y,a1)
self.AndGate(x,ny,a2)
self.OrGate(a1,a2,xor)
pass
def HalfAdder(self, x, y, s, c):
self.AndGate(x,y,c)
self.Xor(x,y,s)
全加器
有几种方法可以构建一个完整的加法器,一种方法是使用两个半加法器,如我在digital electronics课程文本中所述(荷兰语,抱歉):
x y c_i
| | |
+--------+ |
/-| HA | |
| +--------+ |
| | |
| `---------\ |
| | |
| +--------+
| /--------| HA |
| | +--------+
+--------+ |
| OR | s
+--------+
|
c_out
在a
HalfAdder
、x
和y
的顶部,左侧为c
,底部为s
。所以这意味着:
def FullAdder(self,x,y,c_i,s, c_out):
ha1s = self.Wire('ha1s')
ha1c = self.Wire('ha1c')
self.HalfAdder(x,y,ha1s,ha1c)
ha2c = self.Wire('ha2c')
self.HalfAdder(ha1s,c_i,s,ha2c)
self.OrGate(ha1c,ha2c,c_out)
pass
一个普遍的建议是总是把一个问题分成更小的子问题,你可以更容易地控制。
关于python - 半加法器和全加法器逻辑? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34124935/
10-10 19:32