4 利用逻辑门实现加法器和减法器

               

了解了门,我们就可以做一些实际应用了,计算机的主要目的是计算,而门可以用于计算,所以可以说计算机是由各种不同的门组成。接下来我们要做的就是做一个二进制加法器,因为如果做出加法器,就可以扩展为减法,乘法,除法。而我们如何实现加法器呢?我们这次只使用一些很常见、并且有些落后的部件完成:开关、灯泡、导线、电池、门。

输入为开关,输出为一排灯泡,亮表示1,灭表示0。如果二进制串进行加法,我们肯定会想到一位一位进行加法运算,因此如果有8位二进制数,我们就要分8部运算。通过尝试可以知道,只有当输入为两个1时,进位位才为1,因此符合与门特性,而当输入为两个1或两个0时,加法位才会为0.这个符合异或特性。异或我们怎么用最基本的逻辑门表示呢?我们可以通过两个与非门,一个或门构成。这样就构成了一个半加器。

称为半加器的目的是因为我们没有考虑低位的进位问题,如果考虑了,我们就称为全加器。而全加器是由2个半加器和一个或门组成。

接下来我们谈谈一共要用多少个继电器:

进位位是与门,所以由2个继电器组成。

加法位是一个或门,一个与非门,一个与门组成,所以由6个继电器。

半加器由进位位和加法位组成,则有8个继电器。

全加器由两个半加器和一个或门组成,则有18个继电器。

我们有了全加器,则可以通过级联组成一个二进制串的加法。

但是现在计算机使用的是晶体管,所以需要将继电器换成晶体管。

 我们前面实现了加法器,如同我们所说,减法是加法的扩展,所以实现了加法器,只需要稍作修改,就能实现减法,而减法最烦人的就是借位,因此我们就想是否有方法能够避免借位呢?
答案是有的,
(1)当被减数>减数时,设被减数为x,减数为y,假设x和y都是三位十进制数,只需要将x-y=x+(999-y)+1-1000,这个式子看起来很普通,但是就能避免借位问题。因为999-y不可能发生借位,其他的步骤也不可能。
(2)当被减数<减数时,x-y=-(999-(x+(999-y))),这样也能避免借位。
这里我们实现的是二进制的减法,所以类似于上面,
(1)当被减数>减数时,x-y=x+(111-y)+1-1000.
(2)当被减数<减数时,x-y=-(111-(x+(111-y))).
那么知道了方法,利用加法器我们怎么实现它呢?这里我们只实现了第一种情况.
我们把x+(11...1-y)+1-100...0分解开来看,
(1)先是a=11...1-y,这个实际上就是求反,即通过前面所说的反相器。
(2)b=x+(111...1-y)+1,这个只需要前面的加法器即可。
(3)b-100...0这个只需要把最高位忽略掉即可。因为被减数>减数时,最高位肯定为1。
如果我们不能单独做一个减法器,而是把加法器和减法器合并,该怎么做呢?
我们首先要有一个开关,是加法和减法的选择。如果是加法,则按照加法器方式做,如果是减法,则按减法器方式做。
我们设这个选择为x,减法为1,加法为0.把这个位与输入的每个位异或,如果是加法,则输入和输入不便,如果是减法,则输入与输出相反,即对2求补。这就实现了11...1-y的功能。
我们还要设最低进位y,如果是减法,则为1,如果是加法,则为0.这样就解决了x+1+(11...1-y).
我们设最高位为z,如果是加法,输出不变,如果是减法,则输出变为0.我们需要用异或门。即实现了x+(111...1-y)+1-1000..0。
这样我们就实现了减法器与加法器的合并。
接下来介绍几个术语:
(1)设数为x,则999-x为10的补数,则111-x为2的补数。
我们又有一个疑问,怎么表示减法呢?
很多人都知道有原码、反码、补码。
比如111在有符号数时表示的是-1.在无符号数表示的是+3.所以原本的二进制是没有任何含义的,只有给予他上下文,才会有含义。
我们还需要考虑的是有符号数相加时的溢出问题。如果比如011+010=101,原本的正数,变为了负数,因为他超出了补码所能表示的范围。

           

猜你喜欢

转载自blog.csdn.net/qq_44884619/article/details/89465679