【问题标题】:How to convert a boolean expression from AND and OR to only NAND如何将布尔表达式从 AND 和 OR 转换为仅 NAND
【发布时间】:2012-04-08 09:29:56
【问题描述】:

我有一个任务让我发疯 因为我不知道从哪里开始。

任务如下: 转换给定的布尔表达式,使其仅包含 NAND 操作而没有否定。

c * b * a + /c * b * /a

我认为这是可能的,:D 但我不知道怎么做,只花了几个小时转圈。

有人可以指点我正确的方向吗?

最好的问候,

更新:

感谢答案,我想我找到了解决方案:

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))

【问题讨论】:

  • 您应该构建 /A 和 /B,因为无论如何您都需要逆变器进行 OR。两个逆变器串联可以用“无”代替。这将为您节省 4 个与非门

标签: boolean boolean-logic boolean-expression


【解决方案1】:

这对如何通过 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)

【讨论】:

  • 非常感谢! “NAND逻辑”就是这样我想:) ...让我们看看我是否解决了任务:)
【解决方案2】:

要深入讨论如何仅使用一种函数/逻辑门(在本例中为 NOR,但将其更改为 NAND 很简单)构建布尔表达式,请查看

The Pragmatic Programmer Magazine 2012-03: The NOR Machine

【讨论】:

    【解决方案3】:
    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。

    非 (A) = 与非 (A,A)

    A OR B = NAND(NAND(A,A),NAND(B,B))

    【讨论】:

    • 非常感谢,同时我自己也试过了,结果我的表情看起来有点夸张:c*b*a = /(/(c*b*a)*/(c*b*a)) = A; /c*b*/a = /(/(/(a*a)*b*/(c*c))*/(/(a*a)*b*/(c*c))) = B; A + B = /(/(AA)*/(BB))
    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 2018-03-08
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多