日报标题:用这款「教学软件」,我们来讲讲计算器的工作原理 LegionJoe 【强答注意】 这样可爱的问题,用一款教学软件来回答特别合适(•̀ω•́)✧ 首先当然是介绍一下软件里的元件啦 ====基础元件==== 【电线】 回答里将用到白色蓝色两种电线,你需要用它搭成所需电路的基本结构。 【开关】 顾名思义,它有两种状态,分别表示开和关。 (关上的开关) (打开的开关) 【电路信号】 将电路信号铺在电线上来表示接通电线。它也有两种状态,熄灭或激活,我们可以称之为“0”和“1”。 (熄灭的电路) (激活的电路) 【指示灯】 当它被连接到激活的电路时,会被点亮。用于使电路状态更便于观测。 (被点亮的指示灯) 【信号源】 它会使相连的电路保持激活状态。但是当它被一条激活的电路指向时,它会熄灭。 【二极管】 它使电路信号只能单向通过。 (暂缺图) ====“与”,“或”,“非”==== 要使电路能够完成一些复杂的算法,当然不能只是接通 0 和 1,还要能对他们进行一些运算。与或非这三个门就是门电路的基础。 【非门】 非即是输入与输出相反,需要一个输入端一个输出端。 在学习软件中我们可以用这个结构表示: (右侧开关输入,左侧输出) (右侧开关开启时的状态) 可以看到,非门这种结构: 输入 0,输出 1。 输入 1,输出 0。 【或门】 或即是皆可,或门有两个输入端,一个输出端。只要有任意一个输入端被激活,输出端便被激活。 我们用这种结构表示或门: (下方为输入端,上方输出) 或门一共有 4 种状态: 输入 0,0。输出 0。 输入 0,1。输出 1。 输入 1,0。输出 1。 输入 1,1。输出 1。 (或门的四种状态) 【与门】 与门和或门同样需要两个输入端,有一个输出端。 我们这样表示它: (其实它是由三个非门与一个或门组成的) 它同样也有四种状态: 输入 0,0。输出 0。 输入 0,1。输出 0。 输入 1,0。输出 0。 输入 1,1。输出 1。 (与门的四种状态) ====半加器==== 用 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。”单看低位的输出,很像是或门的结构。 那就先搭一个大大的或门吧! 然后只看进位的话,四种情况都很像与门。 那就接出一条与门吧(•̀ω•́)✧ (蓝线接出的与门) 可是这时的计算并不正确,当输入“0,0”,“0,1”与“1,0”时,它会正确地反馈“0,0”,“0,1”和“0,1”。 输入“1,1”时,输出会是“1,1”。 那就让进位为 1 时,低位变成 0 呗! 于是在蓝线后接一个非门,再与白线并入与门。这样只要进位为 1,经非门后的进位将阻止与门的激活。 最后再将蓝线接出,作为最终的进位,第二次运算后的白线接出,作为最终的低位。 然后在四种输入状态下验证: 虽然输出端有点远,但是仔细看的话,会发现在四种输入状态下,结果都是完全正确的! 那这个巨大的未优化的半加器就完成啦! (•̀ω•́)✧ 如果我们在这个基础上,将低位与上一个半加器的进位进行一次加法(0+0 或 0+1 或 1+0 或 1+1),结果的进位再与自身的进位相加(0+0 或 0+1 或 1+0,不存在 1+1),并导出进位。他就变成了一个可堆叠的全加器! 当然在结构上进行优化的话,可以让它体积更小,更易堆叠。 如果你有足够的耐力和脑力,搭出 3000 万个门电路单元,附加上储存单元,也许你也可以搞出一套操作系统,去算算三体的太阳到底会怎么运动。 (•̀ω•́)✧ 阅读原文