第2.2章 使用两个“半加器”实现一个“全加器”

刚才的电路考虑了加法的运算结果可能会有进位(当A和B都为1时),可以作为最低位的运算电路,但不能计算其他位(十位、百位等),因为没有考虑低位的进位结果。因此,只能叫做半加器(Half Adder)。

实际上,一个完整的加法器的输入端有3个:A、B和低位的进位结果CI。

全加器(Full Adder)
第2.2章 使用两个“半加器”实现一个“全加器”_第1张图片

这个全加器相当于是计算3个位(A、B、CI)的和。因此,其最终的“和输出”为三个数的异或。进位输出的规律为:3个数中如果有2个或者以上的数为1时,“进位”位就为1.
全加器真值表
A B CI CO S
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

为了实现这个功能,可以使用两个半加器:

第2.2章 使用两个“半加器”实现一个“全加器”_第2张图片

这个一位的全加器应用于个位时,需要将进位输出接到地,即置为0:
第2.2章 使用两个“半加器”实现一个“全加器”_第3张图片

将多个“一位全加器”级联起来,可以变成“多位全加器”,上一个全加器的“进位输出”连到下一个全加器的“进位输入”。比如8位全加器如下:
第2.2章 使用两个“半加器”实现一个“全加器”_第4张图片

可以简化为:
第2.2章 使用两个“半加器”实现一个“全加器”_第5张图片
或者:

第2.2章 使用两个“半加器”实现一个“全加器”_第6张图片

同样的,可以将两个8位全加器级联起来,变成一个16位的全加器:
第2.2章 使用两个“半加器”实现一个“全加器”_第7张图片

最后:你可能会问:“计算机真的是以这种方式把数字加起来的吗?”
基本上是这样的,但不完全是。
首先,加法器应该做得更快。如果你明白这个电路是如何工作的,你会看到最低位相加
产生的进位作为下一列数相加的一个输入,而第3列的加法又等着第2列加法的进位,依此类
推。加法器总体的速度等于加数的位数乘以单个全加器的速度。这种进位方式称为行波进位。
更快的加法器使用称为先行进位的加法电路,从而加快了加法进程。
第二(但是十分重要),计算机再也不用继电器了!尽管它们曾经用过。建于2 0世纪3 0年
代初的第一批数字计算机使用继电器,后来又用了真空管。现代计算机用晶体管。当用在计
算机中时,晶体管和继电器的功能差不多,但是晶体管速度更快,体积更小,更安静,更省
电,而且还便宜不少。构造一个8位加法器仍然需要1 4 4个晶体管(如果采用先行进位,则需
要更多),但整体电路的体积却小多了。——《编码的奥秘》,第12章。

你可能感兴趣的:(第2.2章 使用两个“半加器”实现一个“全加器”)