加法是算术运算中最基本的运算,而且加法计算也是计算机要做的唯一工作,减法、乘法和除法都可以利用加法来实现。
这里用基本的逻辑门来搭建一个8位的二进制加法器。我们知道两个1位的比特相加,结果很简单。如下图所示
其中低位叫做加法位,高位叫做进位位。我们将加法位和进位位分开表示,如下图
仔细观察,进位位运算(上右图)实际上就是一个与门计算。而加法位可以用一个或门和一个与非门来实现。我们将或门和与非门的输入连在一起,如下图所示
下表总结了或门和与非门的输出,并同我们想要的结果进行比较。
发现两个门输出结果想与就是我们想要的结果。所以我们把或门和与非门的结果作为一个与门的输入,如下图
实际上,我们回过头去观察加法位的运算就会发现,这是一个异或运算。我们把上图用特定的电气符号来表示,并称为异或门,如下图
这样,两个1位的二进制位相加,加法位由异或门输出,进位位由与门输出,如下图所示(为简化电路,我们将下左图简化为下右图)
这就是一个半加器,因为它的进位并没有参与运算。而全加器需要两个半加器和一个或门,如下图所示
全加器的所有组合在下表列出
同时我们将全加器简化为如下格式
而最终要实现8位二进制加法器就需要8个全加器,连接后如下图
简化后的表示图如下所示
A7-A0和B7-B0是表示两个相加的8位二进制数,进位输出和S7-S0表示最后的和。
最低位的进位为0,最高位的进位作为加法器最高位的输出。
上面所描述的加法计算方式跟现在的计算机真正的加法运算方式大同小异。只不过现在的计算机用晶体管实现,计算速度更快,噪声更小,功耗也更低。搭建一个8位加法器需要144个晶体管(采用行波进位)。
因为每个与门、或门和与非门都需要2个晶体管,因此一个异或门需要6个,一个半加器由一个异或门和一个与门组成,需要8个晶体管;一个全加器由两个半加器和一个或门组成,需要18个晶体管。我们需要8个全加器,一共需要144个晶体管。
上一篇-->编码:隐匿在计算机软硬件背后的语言(2)--二进制
下一篇-->编码:隐匿在计算机软硬件背后的语言(4)--二进制减法器