使用 NAND 端口构建 xy+xz+yz

Build xy+xz+yz using NAND port

作为家庭作业,我必须只使用 NANDS 端口来编写 xy+xz+yz。 我将使用符号 NAND(x,y) - 或其他类型的括号来使事情更清楚 - 在我的尝试下面,然后是对每个步骤的解释。我想知道我这样做是否正确,是否有更好的方法。

我的解决方案

NAND[NAND(NAND(NAND(x,y),NAND(x,z)),NAND(NAND(x,y),NAND(x,z))),NAND(NAND(NAND(y,z),NAND(y,z)),NAND(NAND(y,z),NAND(y,z))))]`

我知道这看起来真的无法阅读和跟踪。对不起,不知道如何使它更漂亮。希望我的解释能澄清事情。

我把xy+xz+yz分成两组:xy+xzyz

第一组:

xy+xz = NAND(NAND(x,y),NAND(xz)) = NOT[NOT(xy)*NOT(xz)] = xy+xz

第二组:

yz = NAND(NAND(y,z),NAND(y,z)) = NOT(NOT(yz)*NOT(yz)) = yz (since yz+yz = yz)

现在我必须将第一组与第二组结合起来,为了便于阅读,我将第一组(在 NAND 中称为 g1)和第二组称为 g2

g1+g2= NAND[NAND(g1,g1),NAND(g2,g2)] = NOT[NOT(g1)*NOT(g2)] = g1+g2

最后:

xy+xz+yz= NAND[NAND(NAND(NAND(x,y),NAND(x,z)),NAND(NAND(x,y),NAND(x,z))),NAND(NAND(NAND(y,z),NAND(y,z)),NAND(NAND(y,z),NAND(y,z))))]

我的推理对吗?有更简单的方法吗?

非常感谢大家

您的回答是正确的(尽管您缺少一些标点符号 -- 几个逗号和一个括号)。您可以通过生成所有可能输出的真值 table 来确认。我写了几行C代码来确认。至于你的第二个问题,是否有更简单的方法,我不知道。也许其他人可以帮忙。

x   y   z   xy+xz+yz     nands
------------------------------
0   0   0      0           0
0   0   1      0           0
0   1   0      0           0
0   1   1      1           1
1   0   0      0           0
1   0   1      1           1
1   1   0      1           1
1   1   1      1           1