将以下表达式转换为仅使用与非门

时间:2017-09-26 21:20:35

标签: math boolean boolean-logic boolean-expression

我有以下表达式('表示NOT)...

e'(a+b)

首先我扩展......

e'a + e'b
德摩根定律......

(e'a +e'b)'
((e'a)'(e'b)')'

现在我被卡住了。我使用的每个NAND门只能接受最多2个输入。我可以根据需要使用尽可能多的NAND个门,但我应该尝试使用最少量的门来表达。

我是否在正确的轨道上?我该如何继续?

2 个答案:

答案 0 :(得分:0)

这看起来不是正确的轨道。

您的原始表达式只有三个操作:NOT(e'),OR(a+b)和AND(在我给出的最后两个表达式之间)。您应该弄清楚如何执行这三个操作中的每个操作,然后将它们组合成一个整体结构。知道如何做这些事情对于这类问题至关重要。

以下是第一步:NOT x相当于x NAND x,因此e'相当于e NAND e。从这里继续。

答案 1 :(得分:0)

首先,我建议采取这个:

e'(a+b)

使用更详细的表示法编写它,使转换更容易识别为正确完成:

(not e) and (a or b)

正如Rory Daulton所说,第一步是知道如何使用nand渲染基本的逻辑运算。

    正如罗里指出的那样,
  1. 不能证明e等同于e和e。
  2. 你可以通过nand的定义证明a和b等价于(a n和b)。使用上面的结果,我们只使用nand门恢复等价表达式(a n和b)nand(a n和b)。
  3. 你可以证明a或b相当于De Morgan不是((不是a)和(不是b)),因此(不是a)nand(而不是b)nand的定义。我们可以使用上面的结果来仅使用nand门来导出等价表达式(a n和a)n和(b n和b)。
  4. 回到我们的表达:

    (not e) and (a or b)
    

    我有点像在外面工作,所以我们从最外面的操作开始,然后使用上面2中的规则得到:

    (not e) and (a or b)
    2=> ((not e) nand (a or b)) nand ((not e) nand (a or b))
    

    既然我们在同一级别有四个子表达式,我们可以从左边开始,按照我们的方式行事:

    (not e) and (a or b)
    2=> ((not e) nand (a or b)) nand ((not e) nand (a or b))
    1=> ((e nand e) nand (a or b)) nand ((not e) nand (a or b))
    3=> ((e nand e) nand ((a nand a) nand (b nand b))) nand ((not e) nand (a or b))
    1=> ((e nand e) nand ((a nand a) nand (b nand b))) nand ((e nand e) nand (a or b))
    3=> ((e nand e) nand ((a nand a) nand (b nand b))) nand ((e nand e) nand ((a nand a) nand (b nand b)))
    

    这样的电路可能如下:

    e--+---|\   e'
       |   > >o----------------------|\  (e'(a+b))'
       +---|/                        > >o--------+---|\
                                 +---|/          |   > >o--e'(a+b)
    a--+---|\   a'               |               +---|/
       |   > >o--------|\        |
       +---|/          > >o------+
                   +---|/   a+b
    b--+---|\      |
       |   > >o----+
       +---|/   b'