《穿越计算机的迷雾》
第26节

作者: sholber
收藏本书TXT下载
  由于这是最右边一列,所以不必考虑进位,直接应用二进制加法口诀将a0和b0相加即可。a0和b0都是二进制比特,在这一列上的加法有四种可能的情况,如表4.1所示。

日期:2009-02-16 22:35:40

  可以看出,这一列的“和”或者是0,或者是1,而且只有在a0=1、b0=1的时候才产生一个进位。为了方便下面的讲解,我们把这一列的“和”称做s0,进位称做c0,如图4.5所示。

日期:2009-02-16 22:37:04

  在计算完最右边那一列之后,轮到右边第二列了。这一列基本上也一样,有来自加数和被加数的两个比特(是什么并不知道,取决于你要计算的具体的加法题),在这里我们称之为a1和b1,而且这一列的计算方法也和前面相同。
  不要高兴得太早,毕竟这不是最右边列。如果最右边那一列相加后有进位的话,这一列还得加上那个进位。所以这一列的加法看起来就像是图4.6那样。

日期:2009-02-16 22:38:32

  看得出,因为有了这个进位c0,使得这一列的计算过程稍微有些麻烦(俗话说“有些坑人”)。不过稍安勿躁,毕竟事实上这种情况也不是特别复杂。如果没有从最右边一列来的进位,则它的计算方法和前面一样,如表4.2所示。

日期:2009-02-16 22:40:07

  现在再来考虑另外一种情况,那就是有从最右边一列来的进位(也就是c0=1),如表4.3所示。

日期:2009-02-16 22:41:24

  前面两个表显示了这一列在做加法时,它所能遇到的所有可能的情况。很明显,在任何情况下,这一列都只生成一比特的“和”,以及一比特的进位(如果有的话)。注意,我现在正在强调一个事实:如果有进位产生的话,它只会是“1”,而绝不可能是其它数字,更不会大于1,而且是一个比特。这是个很重要的结论。
  还需要研究其它列上的加法吗?我的看法是不需要。因为其它列上的加法都和刚才讲的这一列相同,将来自加数和被加数的两个比特相加,再加上从其它列来的进位,最后得出结果,并产生一个进位(如果有的话),就像图4.7所示的那样。

日期:2009-02-16 22:42:46

  在图4.7中,a和b分别是来自加数和被加数的一个比特,c1是来自右边一列的进位,c2是本列产生的进位,s是本列的“和”。很显然,所有的列在相加的时候都采用的是这种模式。
  注意,对于二进制加法中单个列的探讨表明整个加法机的制造工作取得了实质性的进展,差不多快要接近最终的成功了。联系到你研究这些的目的不过是为了制造加法机,所以你大脑中灵感的火花一闪,迸出一个非常绝妙的想法。你认为既然加法都是按列进行的,而且每一列的计算过程都一样,那么完全可以设计一个电路来进行“列”的加法。如图4.8所示。


日期:2009-02-16 22:45:24

  不知道在看到这幅图时你的感受时什么,喜欢?感到不舒服?都有可能。我只记得自己小时候刚学会看电路图的时候很高兴,很有一种养牛专业户的家——牛哄哄的感觉,如果非得换一种说法,那就是太上老君打哈欠——神气。总之,你又学了一些新东西,无论如何也该感到高兴才对。
  在图中,灰色的方框代表的是一个盒子,或者一个上面安装了很多电子零件的电路板。这个盒子(或电路板)向外面引出五根导线,它们都各有各的用途,当然不能乱接。为了加以区分,要给它们起个代号,分别是A、B、CI、CO和S。其中,A和B是参与运算的两个比特(来自加数和被加数);CI是从其它列来的进位;CO是这个盒子自己产生的进位;S是这个盒子计算出来的“和”。

  这里有个并不重要,但会让一部分读者感到好奇的东西:就象前面的继电器用符号“J”来表示一样,在这里,我们用“FA”这两个字母给这个电路做了个标记。至于它为什么不使用“XX”、“GG”、“MM”等诸如此类的符号,是因为它在那个曾经让全中国几乎所有人都为之疯狂的外语里叫做“Full Adder”,用中国话说就是“全加器”。

  说到全加器,这不是一个很容易理解的名字,特别是这个“全”字。而且,既然有全加器,是不是还应该有“半加器”?你别说,还真有半加器这东西。但是,半加器仅仅是把来自加数和被加数的两个比特加起来,产生一个“和”以及一个进位,并不考虑从其它列来的进位。换句话说,它只是用电路来实现二进制加法口诀。全加器则不然,它真正实现了二进制加法中,每一列的加法过程,所以它才叫做“全加器”。

  既然有了全加器,解决了二进制加法过程中每一列的计算问题,那么,我们可以搞一大堆全加器,根据加数和被加数的比特数,把它们串联起来组成一个完整的加法电路。图4.9显示了这一过程。

日期:2009-02-16 22:46:30

  图4.9中出现了更多奇怪的符号,比如a2、a1、a0、b2、b1、b0、s2、s1、s0。在这里,a2a1a0和b2b1b0是作为加数与被加数出现的,它们都是3比特的二进制数。作为一个例子,之所以没有使用比3比特更大的二进制数,是因为较小的数能够使我少画一些电路,这样看起来更清楚,同时可以让图片更小,并因此而节约了篇幅。
  对于a2a1a0和b2b1b0这样的表示方法没有什么值得奇怪的,a和b用来区分参与运算的加数与被加数,而下标0、1、2则用来指示这两个二进制数中的各个比特,按它们在这个二进制数中出现的位置和次序。比如当a5a4a3a2a1a0 = 110001 时,其对应关系如图4.10所示。

日期:2009-02-16 22:47:14

  在我们的习惯中通常都是从1开始编号,但是这里却是从0开始编号。这不是我蠢,也不是我喜欢标新立异,而是外国人一开始就这么干。要是你给外国地主放羊,晚上赶羊进圈的时候,你数的是1、2、3、4、5,共5只,而外国地主数的是0、1、2、3、4,共4只,没准儿会当场打起来。现在流行什么都和外国接轨,当计算机科学远渡重洋来到中国后,整个计算机业界也都接受了这种方法。这不是一个大问题,也不算太糟糕,只是需要一段时间才能习惯——你应当习惯,特别是如果你打算从事这个行业的话。在这个行业里,你将会越来越多地接触到这种从0开始编号的方法。

  可以看出,第一个(左下角那个)全加器的进位输入端没有使用,意思是“没有进位输入”,或者“从后面来的进位是0”。其余的全加器,它们的进位输入端都和前一个全加器的进位输出端相连,意思是“前面的,你产生进位了吗?如果有,我得加上它”。s2s1s0是两个二进制数相加后的最终结果。c是最后一个全加器产生的进位,在这里它也是最终结果的一部分。尽管100+1的结果是3比特的101,但是100+100生成的结果却产生4比特的结果1000,最左边的那个“1”纯粹是由于进位产生的。

  如果仔细品味的话,你还可以发现它很容易进行扩充以计算更大的数(这样它会更实用),唯一所要做的就是在现有的基础上再串联更多的全加器。现在你应该感到高兴,看看你自己,进步多大呀,刚拿起这本书的时候,你对电子技术还知之甚少,现在,你连这样复杂的电路都能看懂了,这难道不值得庆贺吗?
  要用电路实现加法运算,使用一大堆全加器看来是不可避免的了。但是,这全加器到底应当如何构造呢?

日期:2009-02-17 18:15:22

  全加器的构想表明,你离这台加法机的完成之日已经不远了。当然,正如黎明前的黑暗一样,如何实现全加器的内部构造,这是你当前全部苦恼的根源。
  这只不过是一台加法机,就算是瞎琢磨,说不定也能琢磨出来。但是联想到以后还要制造减法机、乘法机、除法机、平方根机等等,要制造这样功能齐全的运算部件,靠瞎琢磨简直就是异想天开。
  如果能够发明一种方法,通过分析一个电路的输入和输出,然后就能知道这个电路该如何构造,那该多好啊!晚上躺在床上,你怔怔地望着天花板,心里这样想着。
  事实上,的确有这样的、能够让你听了之后从床上一跃而起的方法来做到这一点。不过,说起来这种方法和逻辑学还有些关系。

日期:2009-02-17 18:16:53

  5.1 逻辑学
  人在社会里生活少不了要互相交流。要进行交流,通常离不开写和说。当然,除此之外,我们有时候也眉来眼去,或者发发信号,用这些特殊的方式进行交流。
请按 Ctrl+D 将本页加入书签
提意见或您需要哪些图书的全集整理?
上一节目录下一节
【网站提示】 读者如发现作品内容与法律抵触之处,请向本站举报。 非常感谢您对易读的支持!举报
© CopyRight 2011 yiread.com 易读所有作品由自动化设备收集于互联网.作品各种权益与责任归原作者所有.