1. XenForo 1.5.14 中文版——支持中文搜索!现已发布!查看详情
  2. Xenforo 爱好者讨论群:215909318 XenForo专区

计算器计算出「1+1=2」的整个计算过程是怎样的?为什么能秒算?

本帖由 漂亮的石头2017-04-09 发布。版面名称:知乎日报

  1. 漂亮的石头

    漂亮的石头 版主 管理成员

    注册:
    2012-02-10
    帖子:
    487,766
    赞:
    47
    日报标题:用这款「教学软件」,我们来讲讲计算器的工作原理

    [​IMG] LegionJoe

    【强答注意】

    这样可爱的问题,用一款教学软件来回答特别合适(•̀ω•́)✧

    首先当然是介绍一下软件里的元件啦

    ====基础元件====

    【电线】

    回答里将用到白色蓝色两种电线,你需要用它搭成所需电路的基本结构。

    [​IMG]

    【开关】

    顾名思义,它有两种状态,分别表示开和关。

    [​IMG]

    (关上的开关)

    [​IMG]

    (打开的开关)

    【电路信号】

    将电路信号铺在电线上来表示接通电线。它也有两种状态,熄灭或激活,我们可以称之为“0”和“1”。

    [​IMG]

    (熄灭的电路)

    [​IMG]

    (激活的电路)

    【指示灯】

    当它被连接到激活的电路时,会被点亮。用于使电路状态更便于观测。

    [​IMG]

    (被点亮的指示灯)

    【信号源】

    它会使相连的电路保持激活状态。但是当它被一条激活的电路指向时,它会熄灭。

    [​IMG]

    【二极管】

    它使电路信号只能单向通过。

    (暂缺图)

    ====“与”,“或”,“非”====

    要使电路能够完成一些复杂的算法,当然不能只是接通 0 和 1,还要能对他们进行一些运算。与或非这三个门就是门电路的基础。

    【非门】

    非即是输入与输出相反,需要一个输入端一个输出端。

    在学习软件中我们可以用这个结构表示:

    [​IMG]

    (右侧开关输入,左侧输出)

    [​IMG]

    (右侧开关开启时的状态)

    可以看到,非门这种结构:

    输入 0,输出 1。

    输入 1,输出 0。

    【或门】

    或即是皆可,或门有两个输入端,一个输出端。只要有任意一个输入端被激活,输出端便被激活。

    我们用这种结构表示或门:

    [​IMG]

    (下方为输入端,上方输出)

    或门一共有 4 种状态:

    输入 0,0。输出 0。

    输入 0,1。输出 1。

    输入 1,0。输出 1。

    输入 1,1。输出 1。

    [​IMG]

    (或门的四种状态)

    【与门】

    与门和或门同样需要两个输入端,有一个输出端。

    我们这样表示它:

    [​IMG]

    (其实它是由三个非门与一个或门组成的)

    它同样也有四种状态:

    输入 0,0。输出 0。

    输入 0,1。输出 0。

    输入 1,0。输出 0。

    输入 1,1。输出 1。

    [​IMG]

    (与门的四种状态)

    ====半加器====

    用 2 进制表示的话,0 是 0,1 是 1,2 是 10。

    我们想要 1+1=2,其实可以理解为我们希望:

    输入 1,1。得到 10。

    因为软件中一个输出端只能表示两种状态,所以我们更改一下,让它有两个有顺序区分的输出,称为低位与进位。变成:

    输入 1,1。得到 1,0。

    当然我们希望它在各个情况下都有正确的表达,所以是:

    输入 0,0。输出 0,0。

    输入 0,1。输出 0,1。

    输入 1,0。输出 0,1。

    输入 1,1。输出 1,0。

    那么我们就开始构造我们的加法器把(•̀ω•́)✧

    答主注意到其中“输入 0,1。输出 0,1。输入 1,0。输出 0,1。”单看低位的输出,很像是或门的结构。

    那就先搭一个大大的或门吧!

    [​IMG]

    然后只看进位的话,四种情况都很像与门。

    那就接出一条与门吧(•̀ω•́)✧

    [​IMG]

    (蓝线接出的与门)

    可是这时的计算并不正确,当输入“0,0”,“0,1”与“1,0”时,它会正确地反馈“0,0”,“0,1”和“0,1”。

    输入“1,1”时,输出会是“1,1”。

    [​IMG]

    那就让进位为 1 时,低位变成 0 呗!

    于是在蓝线后接一个非门,再与白线并入与门。这样只要进位为 1,经非门后的进位将阻止与门的激活。

    [​IMG]

    最后再将蓝线接出,作为最终的进位,第二次运算后的白线接出,作为最终的低位。

    [​IMG]

    然后在四种输入状态下验证:

    [​IMG]

    虽然输出端有点远,但是仔细看的话,会发现在四种输入状态下,结果都是完全正确的!

    那这个巨大的未优化的半加器就完成啦!

    (•̀ω•́)✧

    如果我们在这个基础上,将低位与上一个半加器的进位进行一次加法(0+0 或 0+1 或 1+0 或 1+1),结果的进位再与自身的进位相加(0+0 或 0+1 或 1+0,不存在 1+1),并导出进位。他就变成了一个可堆叠的全加器!

    当然在结构上进行优化的话,可以让它体积更小,更易堆叠。

    如果你有足够的耐力和脑力,搭出 3000 万个门电路单元,附加上储存单元,也许你也可以搞出一套操作系统,去算算三体的太阳到底会怎么运动。

    (•̀ω•́)✧

    阅读原文
     
正在加载...