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

时间:2018-03-10 22:06:31

标签: logical-operators boolean-logic boolean-expression

对于作业,我必须仅使用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))))]

我的推理是对的吗?还有一种更简单的方法吗?

非常感谢你们

1 个答案:

答案 0 :(得分:1)

你的答案是正确的(虽然你有一些标点符号 - 一些逗号和一个括号)。您可以通过生成所有可能输出的真值表来确认。我写了几行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