我有一项任务让我抓狂因为我不知道从哪里开始。
任务如下:转换给定的布尔表达式,使其只包含NAND运算,不包含负数。
c * b * a + /c * b * /a
我认为这是可能的,:D但我不知道该怎么做,只花了几个小时在原地打转。
有人能告诉我正确的方向吗?
谨致问候,
askin
更新:
多亏了这些答案,我想我找到了解决方案:
c*b*a = /(/(c*b*a)*/(c*b*a)) = A;
/c*b*/a = /(/(/(a*a)*b*/(c*c))*/(/(a*a)*b*/(c*c))) = B;
c*b*a+/c*b*/a = A + B = /(/(A*A)*/(B*B))
本文详细介绍了如何通过NAND构建其他逻辑门。应该是一个简单的应用程序:
http://en.wikipedia.org/wiki/NAND_logic
例如,C=A AND B相当于
C = NOT (A NAND B)
or
C' = (A NAND B)
C = C' NAND C' (effectively NOT'ing A NAND B)
要深入讨论如何用一种函数/逻辑门构建布尔表达式(在这种情况下,NOR,但将其更改为NAND很简单),请查看
实用主义程序员杂志2012-03:NOR机器
c * b * a + /c * b * /a
仅NAND
/( /(c * b * a) * /( /(c * c) * b * /(a * a) ) )
NAND( NAND(c,b,a) , NAND( NAND(c,c), b, NAND (a, a)))
所以你需要两个3门NAND,三个2门NAND。
NOT(A)=NAND(A,A)
A或B=NAND(NAND(A,A),NAND(B,B))