【问题标题】:How is the NAND gate implemented? (Conceptually)与非门是如何实现的? (概念上)
【发布时间】:2020-04-16 06:04:19
【问题描述】:

我试图找到你只是无法实现的最低级别的事情,因为它们太低级了。所以看起来所有的计算都可以从NAND gate构造。

从真值表中很容易在 JavaScript 中“实现”:

function nand(a, b) {
  if (a == 0 && b == 0) return 1
  if (a == 0 && b == 1) return 1
  if (a == 1 && b == 0) return 1
  if (a == 1 && b == 1) return 0
}

但这是作弊。因为IF statements implemented 怎么样?我不太清楚如何在代码中表示 if 语句链接,因为我不确定是否熟悉逻辑门/电路,但我很确定 IF 语句本身可以表示为 NAND 门的组合。

那么它一直是乌龟! NAND 门由更多的 NAND 门(用于 if 语句)等实现。

那么我们如何避免这种情况呢?我们是否简单地说与非门是一个公理?我想知道,因为我想知道形式验证的基础在哪里。

换句话说,我问的原因是因为我注意到每个函数都可以实现为其他函数,甚至是 IF 语句等。一切都可以一直实现到与非门。但是后来我摇摆不定,NAND也是一个函数,但它的实现是什么?!?我很困惑/困惑,需要一些关于如何思考这个问题的指导。

【问题讨论】:

  • 你想要什么类型的输入?
  • 你知道我不太确定,无论输入是否可以定义为公理。
  • 有底。硬件中的逻辑电路是物理设备。您可以在顶部继续堆叠“使用更多 NAND 模拟 NAND”的层,但底部仍然存在,只是现在更远了。顺便说一句,JavaScript if 语句的工作方式与纯数字逻辑中的 if 完全不同。

标签: javascript logic bit-manipulation circuit


【解决方案1】:

既然 NAND 不是 AND,你可以用 AND 来声明它,这意味着 NAND 不是一个公理:

function nand(a, b) {
  return !(a && b)
}

console.log(nand(false, false)) // true
console.log(nand(true, false)) // true
console.log(nand(false, true)) // true
console.log(nand(true, true)) // false

使用乘法你可以用 0 和 1 声明 NAND。因为 AND 是 a * b(如果两者都是 1,你得到 1),NAND 是 1 - a * b

function nand(a, b) {
  return 1 - a * b
}

console.log(nand(0, 0)) // 1
console.log(nand(1, 0)) // 1
console.log(nand(0, 1)) // 1
console.log(nand(1, 1)) // 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-15
    • 2021-01-03
    • 2016-01-17
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    相关资源
    最近更新 更多