加法器原理

作为一名半路出家的程序员,我一直没有弄明白计算机是怎么实现加法操作的,直到最近读了《编码》这本书。

s25103742

下面,是我对加法器原理学习的小结。

1、继电器

做加法器首先需要需要各种逻辑门,而实现逻辑门的一个关键部件是继电器。虽然现代计算机已经使用效率更高的半导体代替古老的继电器,但基本原理并没有变化,追本溯源,我们的加法器仍然从最基础的继电器开始。

下面是一个电磁铁。如果闭合开关,右边那个线圈缠绕的铁柱会产生磁场。

加法器.png@2x

有了电磁铁,我们就可以制造出如下的装置:

继电器1

这个装置的特别之处在于,通过对电磁铁线路开关的打开和闭合,我们可以控制另一个线路的开关。比如,当闭合电磁铁的开关时,电磁铁会将右边的开关吸下来,接通右边的线路,如下图所示:

继电器2

这个装置蓝色线框中的部分,就被称为继电器。

2、逻辑电路

电路有两种基本连接方式:串联并联

下图中的两个开关是串联:

串联1

在串联的电路中,两个开关必须全部闭合,整个电路才能接通:

串联2

简单来说,串联对应着逻辑与(AND)操作。

对应的,下图中的两个开关是并联:

并联1

在并联的电路中,只要有任意一个开关闭合,整个电路就能接通:

并联2

并联电路对应着逻辑或(OR)操作。

3、门

与门

如果我们将两个继电器串联起来,就能得到一个与门:

与门1

只有左边两个开关同时闭合时,右边的灯泡才会被点亮。

与门可以简记为下面的符号:

与门2

使用这个符号,可以将上面的电路图简化为这样:

与门3

如果用0表示线路断开,1表示线路连接,那么与门的输入与输出共有以下4种情况:

与门4

这些关系可以用下表来描述:

AND 0 1
0 0 0
1 0 1

或门

将两个继电器并联,可以得到一个或门:

或门1

或门可以简记为下面的符号:

或门2

类似地,如果用0表示线路断开,1表示线路连接,那么或门的输出与输出之间的关系如下:

或门3

或者总结为一个表格:

OR 0 1
0 0 1
1 1 1

非门

前面的继电器线路中,输出线路与输入线路是一致的,即输入线路的开关接通,输出线路也接通,输入线路断开,输出线路也断开。但其实,我们完全可以做一个小改造,让两者的行为反过来。如下图:

非门1

上面的电路图中,左边的开关打开时,右边的灯泡会亮,左边的开关闭合时,右边的灯泡会熄灭,行为正好与控制开关相反。用这种方式连接的继电器叫反向器,或者叫非门。可以用以下符号表示:

非门2

异或门

与门、或门、非门是三种最基础的门,所有其他逻辑运算都可以由这三种门组合得到。不过,为了方便起见,有一些常用的组合也有专门的名字,比如异或门(XOR)。

异或门结构如下:

异或门

可简记为以下符号:

异或门2

异或门的输入输出可表述为下表:

XOR 0 1
0 0 1
1 1 0

4、二进制加法器

二进制的加法表非常简单,一共只有4种情况:

0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10

也可以用表格表示:

+ 0 1
0 00 01
1 01 10

注意到 1 + 1 时产生了进位,我们可以把加法表拆成两个表,一个表只记录当前位:

+当前位 0 1
0 0 1
1 1 0

一个表只记录进位:

+进位 0 1
0 0 0
1 0 1

对照上面的各个门,可以发现,进位表对应与门(AND),当前位表则对应异或门(XOR)。

有了上面的基础,我们就可以开始实现二进制的加法器了。首先实现的是两个二进制一位数的加法器:

加法器1

这个装置称为半加器,可以简记如下:

半加器

它之所以加半加器,是因为它只能处理两个数字(二进制一位数)的相加,不能处理前面计算的进位。为了处理进位,可以将两个半加器和一个或门连接如下:

半加器2

或者简记如下:

全加器

一个全加器只能处理三个二进制一位数(其中一位是进位输入)的相加。如果要处理多位数的相加,需要将多个全加器连接起来。

下面是一个8位二进制加法器的连接方法:

第1个全加器:

全加器2

第2~7个全加器:

全加器3

第8个全加器:

全加器4

完整线路图如下所示:

8位加法器

以上就是二进制加法器的原理。

2 Replies to “加法器原理”

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s