1 加法器
计算机这个东西,其实会的东西并没有我们想象中的多,目前的计算机,与看起来恰恰相反的是,会的东西非常的少,只会一个东西,就是算加法。不管我们是用来上网,还是看电影,甚至是Alpha Go下围棋,最后都是算加法。可能有人会问,减法,乘法,除法加起来才是四则运算,怎么可能只会加法呢?其实除了加法以外的四则运算,其它三个都是使用加法来模拟出来的。
2 加法表
当我们在计算加法的时候,其实在心里是有一个加法表的,比如1+2=3这样的一个加法表。当我们在使用算盘的时候,也有一个珠算表,就是我们小学时候背诵的那种,一下五去四,二下五去三,三下五去二,四下五去一这种的,当我们背诵了这些口诀以后,就可以流畅的使用这些口诀进行算盘的操作了。我虽然学过算盘,但是我还是用计算器比较熟练,算盘只会用来算加法和减法。算算数的时候,我们有加法表;用算盘的时候,我们也有算盘口诀表。同样,用二进制的时候,也有一个加法表,而且二进制的加法表非常非常的简单,简直就是一目了然。
当我们在算128+256的时候,我们其实分解了这两个数字,个位,十位和百位分别相加,然后,再有一个进位,超过10了就要进位。在二进制中也是这样,超过1了就要进位。总结一下二进制的加法口诀就是:0+0=0;0+1=1;1+0=1;1+1=0,进位是1。这个口诀比我们小学时候学的加法口诀简单多了,更别提乘法口诀了。二进制加法和十进制加法一样,就是将两个二进制数字从右向左依次逐渐相加,根据上面的口诀,该0就是0,该1就是1,该进位就进位,和十进制一样,但是比十进制的加法要简单很多。
重要的是,我们需要使用电路图将二进制的加法表示出来。在前几期我们已经用继电器实现了主要的几个逻辑门,因此,这次只需要用逻辑门就可以了,如果还是用继电器的话,电路图会非常的复杂,比如实现一个8位的二进制加法,用到的继电器是144个,画图会非常的繁琐,如果用逻辑门来表示,就会非常的简单明了。
先来看一下进位的情况,前面那四条,0+0=0,不进位;1+0=1,不进位;0+1=1,不进位;1+1=0,进1位。这个情况,就是逻辑门中的与门。因此,可以使用与门来计算两个二进制加法的进位。在解决了进位的问题以后,我们再来看看加法的问题。我画一个表出来,这个图我就放在我的微信公众号里,一图顶千言。可以看看加法的规则和哪个逻辑门类似。
下面这个图就是异或门,异或门的意思是如果想让输出结果是1,就得让输入端只能有一个1,如果两个都是1的话,输出就是0.这样的话,我们又解决了加法的问题。只需要把这个异或门和一个与门并联起来,就同时解决了加法的进位问题和加法的问题。我再画一个图表示一下。
这个东西也有个名字叫半加器,为什么叫半加器呢?因为这个只能算两个二进制数的加法,得到的结果是一个加法位,一个进位。半加器没有办法做到将上一次的进位(如果有进位的话)进行下一次的计算,因此只能算半加器。为了能将进位也能计算,还需要对这个电路进行改造,改造的结果叫全加器,工作原理就是将两个半加器和一个或门进行连接,电路图如下。
【抱歉,这里有个图太大了,腾讯不让传,如果你感兴趣的话,点击阅读原文,那里有我的文章链接,里面有这张图,是半加器和全加器的电路图】
我们可以算一下到底需要使用多少个继电器。一个异或门需要6个继电器,因为每个与门,或门和与非门都需要2个继电器。因此一个半加器需要8个继电器。每个全加器需要两个半加器再加上一个或门组成,因此需要16+2=18个继电器。一个全加器只能代表一个二进制,如果需要8位二进制的话,需要8个全加器,因此需要的继电器数量就是18*8=144个继电器。如果算8位二进制加法的话,就是8个全加器,每个全加器的进位输出都是下一个全加器的进位输入,这样连接起来就行了,如果需要计算16位二进制,就连接16个全加器即可。图我就不画了,大家随便找一本微机原理的书,半加器全加器上面都有详细的介绍。
3 现在的计算机真的是这样算加法么?
首先,现在的计算机肯定不是用这样的加法器,因为现在的计算机已经不用继电器了。其次,现在的计算机使用的是晶体管,晶体管的工作方式和继电器基本上一样。我们来回顾一下,这个电路每一次进位输出要参加到下一次的加法运算中,因此加法器的速度和全加器的速度有关,而且计算的数字越长,速度越慢,是一个线性的关系,基本上等于全加器的速度乘以计算的位数。这种方法有个名字叫脉冲进位,速度不是很快,因此,还有一种替代脉冲进位的方法叫前置进位树,这个前置进位树需要的电路更复杂,效率也会更高,也是目前最流行的高速加法器结构,比较出名的有汉•卡尔森算法。在这里我就不说了,大家可以去自行搜索学习。
加法器完成一次操作所需要的时间,基本上决定了数字电路的主频,因此,提高加法器的运算速度对提高电路的性能有非常重要的意义。本次讲的是脉冲进位,也有个名字叫多米诺电路,因为这个进位确实有点儿像多米诺骨牌一样,一个一个的进位。至于现在Intel和AMD使用的哪种方法设计加法器,我是不清楚的,我如果清楚的话,我还用在这里做电台么,早就走向人生的羊癫疯了,还有空在这里写公众号,每篇文章打赏个10块20块的,所以,大家如果对Intel和AMD的CPU特别感兴趣,估计你也不知道,人家这是商业机密,不可能透露给一个爱好者。
4 Intel和AMD
既然说到了CPU,最近关于Intel和AMD这两家公司有个大新闻,非常传奇的两个公司。最近AMD发布了一款处理器叫锐龙处理器,导致公司的股票噌噌的上涨,也让Intel的牙膏快点挤出一些来。对大部分不是狂热的爱好者来说,现在的CPU其实已经不是那么重要了,毕竟看看网页聊个天,CPU快一些也感觉不出来。对消费者来说是好事,毕竟Intel的CPU太贵了,又贵又不肯把自己的好货拿出来卖,现在AMD发大招了以后,Intel应该马上把自己的牙膏多挤一些出来。你看Intel的i5和i7处理器卖了那么久,价格还死贵死贵的。我看了一下锐龙的CPU和i7 7700k的测评,如果测评没问题的话,这次AMD形成了对Intel的碾压,而且价格是Intel的一半。去年我在京东618的时候刚刚买了Intel的处理器,如果有钱的话,就换一台机器了。
5 减法
我在一开始的时候就说了,计算机中只算加法,那减法是怎么实现的呢?减法也是用加法实现的。如果有人心里有疑问的话,说明不是一个好学生,作为一个好学生,在经历了这么多年的教育以后,还有疑问,说明教育的不太成功。一个成功的教育产品,应该不能有任何思考,如果你有思考,那也不能说出来;如果你又思考又勇敢还要说出来,那最起码不要写出来;即使以上的规则都违反了,又思考,又说又写,最后的底线是不要签名,不要按手印。如果非得作死,不遵守以上所有规则,发生什么事情都不要感到惊讶。以上的规则适用于超鲜,因为超鲜是个神器的国家。
和今天一样,在古代的时候,统治者也需要下层的人傻乎乎的,古代使用的方法是不让你学习,一个字都不认识,别人说啥你就信啥,老老实实种一辈子地,农夫,山泉,有点田,这辈子好好积德,下辈子再说。现在不行了,因为如果你是文盲的话,没法赚更多的钱养活上层阶级,比如说如果你是文盲的话,去血汗工厂都没法干活,说明书也不认识,所以,必须得让这些奴隶掌握一定的知识,但是,掌握知识是很危险的,万一你胡乱读书,一下子开窍了呢?这对统治阶级是个非常大的威胁。这个世界上有两件事情是最难的,一件事是把你的思想装进别人的脑袋,另一件事情是把别人的钱装进你的口袋。现在的统治阶级需要同时完成这两件事情。使用的方法是垄断教育,只能接受一种教育,古代的时候,不认字的人因为不认字,上别人的当,现在的人,因为受了教育,上文字的当。而且,垄断了教育以后,可以批量生产能干活的笨蛋。所以呢,要搞清楚自己是不是上了当,这个是很难的。反正我是搞不清楚,我每天看新闻联播,政府告诉我,只要听他的就不会上当,所以,我觉得我没有上当吧,呵呵。
6 继续说减法
在加法中,相对比较困难的是进位,在减法中,相对比较困难的是借位,就是被减数减去减数的时候,比如12-7,个位数不够,需要向十位数借位,这个逻辑用电路实现比较困难。因此为了防止出现借位的情况,使用了一个凑数的方法,其实也很好考虑,在十进制中,为了防止出现借位,可以凑一个最大的几位数,比如最大的一位数是9,最大的两位数是99,最大的三位数是999,使用这个最大的数当被减数,这样就不会产生借位的问题了,顶多减出来是0,不会出现不够减的情况。因此,在12-7这个减法可以这样来弄,12+(10-7)-10,再变化一下就是12+(9-7)+1-10,其中9-7=2,这个数字2被称为7的补数。
在二进制的减法里,也是使用了这样一个操作,先把减数的补数计算出来,然后在将补数和被减数相加,然后再加1,最后再减去一个整数。这个过程在计算机中更简单,在十进制中,如果求一个数的补数,还得用最大的几位数,比如9,99,999这种的做个减法,在计算机中完全不用,用一个反向器就搞定了。一个数的补数就是把1换成0,把0换成1,连算都不用算,就把补数算出来了。
就这样,减法就用加法实现出来了。如果听不懂,需要拿一本书自己研究一下。绝大部分人,知道个大概意思就行。特别的爱好者呢,自然早就自己去翻书了。
好了,这期到这里,谢谢收听。欢迎关注我的微信公众号,软件那些事儿。