zhengrenzhe's blog   About

加法器是如何工作的

大部分人应该都听过加法器这个东西,顾名思义就是用硬件电路实现两个数的加法。加法器是构成计算机的基础,现代计算机中的加法器与加法器最初诞生时候的样子已经大相径庭,但其核心原理还是基本相同的,都是通过「逻辑门」来进行运算。在学习加法器的知识之前,我觉得这太神奇了,咔咔通个电就把结果算出来了,但其实它的构成非常简单。

首先需要说明,这里的加法器指的是「二进制加法器」,就是只能用于二进制加法运算,因为数字电路通常以二进制为基础,所以二进制加法器也是最普遍的。

继电器

继电器是一种以电流驱动的机械控制元件,通过一个较小的电流来控制较大电流的开关。 (图片来源于wikipedia) 当左边的回路闭合,电磁铁产生磁力把Anker吸下来,Anker又造成了右边回路的闭合,就是这么简单。继电器是加法器必不可少的组成部分,不过随着科技的发展,加法器内不再使用继电器了,现在以晶体管来代替,但其基本原理还是相同的,本文以简单起见仍使用继电器来构成加法器。

逻辑门

接下来是最核心的部分:「逻辑门」。它的原理很简单,就是基于电路的通断。来看下下面的电路:

只有当A与B这两个继电器通电闭合后,右边的电路才形成回路,这时可以说只有当A与B同时闭合时,电路才形成回路。可能你会觉得这跟编程语言里的逻辑运算符&&作用一样啊,其实这确实是一回事,在20世纪30年代,香农提出了布尔表达式可以在电路中实现,他将布尔代数与电路联系了起来。继续回到这里,采用这种形式的电路,我们称其为「与门」,与门接收两个输入,只有当两个输入同时接收到信号时才会产生输出,如果用编程语言的概念来理解的话,就是只有A与B都为「true」,A && B才为true。与门的电气学符号与真值表如下所示:

AND 0 1
0 0 0
1 0 1

如果你看懂了与门,那就应该能猜得到其他几种逻辑门是如何构造的了,他们的核心原理都是由继电器来控制整体回路的通断,在这里就不把每种逻辑门的详细构造画出来了,以下均以电气学符号代替,详细的构造可以查看wikipedia。逻辑门有多种,在加法器中只用到了三种:「与门」、「或门」、「异或门」。

异或门的符号为: (图片来源于wikipedia) 它的真值表为:

XOR 0 1
0 0 1
1 1 0

或门的符号为: (图片来源于wikipedia) 它的真值表为:

OR 0 1
0 0 1
1 1 1

半加器

下面就开始来正式构造一个加法器了,首先来从算数角度来看下二进制的加法。二进制的加法表如下:

+ 0 1
0 0 1
1 1 10

加上先导0的话则是:

+ 0 1
0 00 01
1 01 10

下一步来从和与进位这两个维度来看,则可以得出下面两个表:

0 1
0 00 01
1 01 00
进位 0 1
0 00 00
1 00 01

这时你会神奇的发现,和与进位这两个表分别对应「异或门」与「与门」的真值表,这时二进制加法就与电路联系起来了,我们可以分别用一个异或门和与门来表示和与进位:

如上图所示,输入A和输入B分别为两个二进制数,当输入产生时,异或门将产生一个加和输出,与门产生一个进位输出,这就实现了上面加法表的规则,这种电路结构称为「半加器」。但它是不完美的,它不能处理两个多位二进制数加法产生的可能的进位,所以接下来就由「半加器」升级到「全加器」。

全加器

全加器的构造如下图所示:

它由两个半加器和或门组成。进位输入接收上一位运算产生的进位输出(如果这是第一位则无输入),进位输入与输入AB产生的进位输出通过半加器产生一个总体的加和输出,同时他们的进位输出与输入AB产生的进位输出通过一个或门产生一个总体的进位输出,这样就运算完了。

以上构造的电路就称为「全加器」,它能完整的处理二进制加法中的加和与进位。不过此时的全加器依旧只能处理一位二进制数的加法,如果希望算一个多位的,则只需简单的将多个全加器连接起来即可:

上图就是一个「4位全加器」,A1-A4,B1-B4分别表示两个二进制数的每一位输入,原始进位输入为0(低电平),S0-S3为每次的加和输出,因为4位加法有可能因为进位产生5位的结果,所以总的结果还要包含C1这个最后一个进位输出,到此,一个加法器就实现了,如果还想实现更高位数的二进制加法,只要依次再加几个全加器即可。

← Selection & Range 基础  减法是如何运算的 →