计算机如何实现加法

Posted by Young Ken on 2018-01-12

计算机如何实现加法

这个博客源于媳妇的一个问题,计算机怎么样计算的?

当问到这个问题的时候我还是有点措手不及的,不知道从哪里说起,即使说出了答案,答案也不完整,没有逻辑,很多知识更不敢较真,我决定对这个问题深入探索一下,这也是今年的目标,对计算机怎么样计算的这一问题给出答案。

基本电路

我们先从电路入手,也就是用两个开关,一个灯泡和电池组成的简单电路。

串联电路

这个电路是两个开关都关闭灯泡才会亮。如果把开关关闭定义为1打开定义为0,下面的表达方式更清楚。

这个好像在哪里见过,我们再换一下表达方式。

这个时候好像明白了,这不是计算机中的操作吗。

1
2
3
if(true && true) {
}

并联电路

同理,只有一个开关关闭灯泡亮,如果把开关关闭定义为1打开定义为0,可以用下面的方式表达。

我们再换一下表达方式。

1
2
3
if(true || true) {
}

我们总结一下,好像我们猜到了什么,是不是通过电路的开关状态和电路的链接方式能表达逻辑关系。答案是肯定的。

逻辑门

通过上面的例子,我们知道,链接方式(串联并联)和开关的状态可以表示逻辑,下面我们探索一下这样的电路能表达什么样的逻辑。

AND(与门)

我们把开关换一下,换成下面这样,

开关是个一个小铁柱绕着线圈,当小铁柱通电的时候,会产生吸引力,把开关吸下来,灯泡亮起来。那么串联就是这样的,

这样的电路叫做与门(AND),有个专业的符号表示与门

它的意思是这样的,

最终表达的就是,当两个小铁柱都通电的时候输出1。

OR(或门)

或门(并联)的电路图

当其中一个通电的时候,小灯泡就亮了,符号是这样的

表达的意思,

NOT(非门)

什么是非门呢,我门先看下电路图,

从上面的图可以看出来,当小铁柱不通电的时候,灯泡是亮的,小铁柱通电之后灯泡反而灭了。非门也有符号表达,

表达的意思,

NOR(或非门)

还是老思路,先看电路图,

从上面的电路图可以看出来,当两个小磁铁都不通电的时候,小灯泡变亮,当其中一个通电的时候,灯泡熄灭。这样的电路叫做或非门

符号表达,

其实就是或取非。

NAND(与非门)

来张电路图,

从上面的电路图可以看出来,两个都通电之后灯泡灭了,这样的定义叫做与非门

符号的表达,

其实就是与取非。

真正的加法来了

在进行计算机的加法(二进制加法)运算之前,我们先复习一下10进制加法,78 + 114 = 192。这个值具体怎么来的,计算过程应该是这的,先个位相加,等于12,也就是向十位进1,个位是2。十位相加,7+1+1=9,百位相加1+0=1。我们分析一下,加法运算的规律,最重要的有两点,一是同位相加,二是如果同位相加大于等于10,那么向上一位进1。

二进制加法也是如此,

1+1 等于0,向上一位近1。如我们把加法分成同位相加和进位,二进制加法可以这样表示。

我们计算一个二进制加法,来是试一下,

0 1 1 0 0 1 0 1

+1 0 1 1 0 1 1 0

———————

1 0 0 0 1 1 0 1 1

现在老板想让你设计一个加法计算器,经过你们的商量,你们把他设计成了这样,

灯亮表示1,不亮表示0。现在设计电路就交给你了,这时候有没有恍然大悟,我们的逻辑门不就是做这个事情的吗,加法可以分成两部分,一个另一个是进位。我们发现进位的逻辑门已经有了,就是我门的和AND(与门)有点小古怪,我们的逻辑门没有符合它要求的输出。

不要着急,我们先思考一下我们已经有的逻辑门,有没有可能组合出这样的结果。

我们发现这两个逻辑门再接上与门后就是我们想要的结果。逻辑门的表达方式这样的,

是不是有点小兴奋呢。其实这个逻辑门已经存在了叫做XOR(异或门),符号表达是

输出结果是这样的,

这就是我们要的,现在我能可以继续设计了。先解决一个位的加法运算,

我们用一个符号表达上面的图形,我们把他叫做半加器

这个设计就能满足我们的设计,A输入和B输入分别输入值得时候,会对应相应的和输出和进位输出。现在我们解决了一个位的加法,但是我们知道,一个位相加并不能实现真的加法计算,我们要把进位输出作为上一位的加数。想一下这个计算(二进制)1111 + 1111 = 11110。当第二位相加的时候,不仅要1 + 1,还要加上第一位的进位1,也就是1+1+1。我们现在的设计只有两个输入A输入和B输入,根本不能完成1+1+1这样的操作,也就是我们需要一个进位输入,不绕弯子,直接给出答案。

它的工作原理是这样的,当A输入和B输入到一个半加器中,把和输出作为下个半加器的输入,两个半加器的进位输出或门作为最终进位输出

我们可以吧上面的抽象成更简单的图形,我们把它叫做全加器

追后你把这些全加器都链接到了一起,就能进行加法运行了。当和输出为1的时候灯泡亮,0的时候灯泡灭。

总结

其实这个值是从硬件实现上解释了如何计算加法,距离解决计算机怎么计算的大问题还差好远。