计算机是如何做加法的?(2)——构建一位加法器

在上一篇中,通过对多位加法器结构的分析,我们得到了一位加法器的原型,也即所谓的全加器(Full Adder, FA)

image

现在考虑如何去实现它。

分解

观察一下所谓的进位输入,还是以前述的十位上的加法为例:

image_thumb3[1]

其实就是做了一次三个一位数的加法“5+2+1”而已。

怎么做三个数加法呢?很简单,依然是运用分而治之的原则。分两次来做,5+2=7,7+1=8.

进位可完全视作是一个特殊的加数(只能为1或者为0),与其余两个加数等价,要把三个数相加,显然你需要知道如何把两个数相加,之后再把结果与第三个数相加。

半加器

因此,还是要回到两个数相加的情况,我们需要一个更为基础的能处理两数相加的构件:

image_thumb7

这样的一个东西,我们称之为半加器(Half Adder,HA)。它能接收两个输入,并产生两个输出:一个加位(Sum),一个进位(Carry)

用半加器构建全加器

与前面类似,先不考察半加器的细节,假定它已经有我们想要的功能,我们如何用它来构建全加器?

考察一个例子:7+8+1(1代表一个进位输入),最终结果是16,要得到一个6和一个新的进位。

既然实质就是做两次两个数的加法,

还记得前面关于串行与并行策略的讨论不?

那么作为一种简单粗暴的方式,依旧是弄它两个半加器,然后连起来,代表两次加法:

image_thumb8

在这里,第二个半加器的进位输入被我们丢弃了,只取了第一个的进位作为最后输出。

对上述例子而言,目前的做法显然是OK的,但能否适应更一般的情况呢?

让我们来看另一个例子:4+5+1

image_thumb9

结果悲剧了,应该是10,但输出却是00,在第二个半加器里才出现了进位,但被丢弃了,导致了错误的结果。

由于无法预料会在哪里产生进位,丢弃哪一个都不行。简单的处理就是再引入一个半加器,把这俩再加一下:

image_thumb10

注:是把第三个半加器的加位作为最终的进位输出,进位则丢弃(最终只需要两个输出,势必要丢掉一个)。

如果我们观察一下人做加法的一般过程,那么我们的确是在不知不觉中做了三次两个数的加法:

image

现在考察以下两种情况,都能够满足要求:

image_thumb11

两次进位的问题

现在,即便前面两个都产生了进位,1+1=2,第三个半加器结果最大也不过是2,要满10才能产生进位,因此,丢弃它的进位是安全的。

但另一方面,最终的进位输出(CO)可能会参与到下一级的进位输入(CI)中去,比如前面构建多位加法器时:

image

如果真的产生了两次进位,则违反了我们关于进位输入只能为1或0的假设。

仔细审查一下,我们可以断言,如果进位输入满足了假定,两个半加器都产生进位的情况是不存在的。

因为这意味着三个数之和至少达到了20!

image

考虑其中的进位输入最大也就是1,三个数最极端的情况也就是9+9+1=19,不可能超过20.

因此,只要一开始没有违反进位输入(CI)的假定,那么进位输出(CO)也是可控的,因此级联多个一位全加器组成多位加法器是可行的。

对进位逻辑的再思考

综上所述,进位或者来自第一个半加器,或者来自第二个半加器;又或者都没有进位,但不可能同时产生进位!

概括地讲,第三个半加器只需处理这三种情况:0+0,0+1,1+0.

它甚至不用处理我们通常认为最简单的1+1。

这对于一个我们设想能够处理任何两个个位数相加的半加器来说,的确是有点屈才了,从它的进位输出被丢弃也可看出它没有得到充分利用。

事实很明显:这里的逻辑其实无需用一个半加器去实现。

到目前为止,我们的全加器由三个半加器构成:

image 

它是能够满足我们的要求的,但我们希望或许能够简化并用一个更简单的器件代替第三个半加器:

image

到目前为止,讨论都在十进制的基础上,但不难注意到,对于进位逻辑而言,它只涉及0和1,这或许是开始逐步引入二进制的一个不错的契机。下一篇,将进一步探讨如何简化及改进目前的全加器结构,焦点将位于第三个半加器上。

转载于:https://my.oschina.net/goldenshaw/blog/411993

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值