
2.4 从加法到芯片
2.4.1 万法归加法
继续深究下去,打破砂锅问到底。
上述介绍的补码系统粗看起来比较奇怪,实际上不然,了解了几种运算后,就会明白补码表示是多么简便。
下面来看两个数的加减运算。a+b或者a-b。如果用平时数学上的表示,需要分别判断a和b的符号,加上运算符,就有8种组合:+++、++-、-++、-+-、--+、---、+-+和+--。内部电路的运算需要判断8种情况,会比较复杂。
如果用补码,因为补码自身已经处理了正负数,所以只需要判断运算符是+还是-即可,如果是+就把a和b直接相加,如果是-,就再次对b求补码,然后加a。
举例如下。
计算17+22=39,用8位二进制表示为00010001+00010110,结果为00100111。计算结果正确。
计算22-17=5,22的二进制表示为00010110,17的二进制表示为00010001。判断运算符为-,所以把17求补码,为11101111。然后加00010110,结果为100000101,现在最高位出现了一个进位1,扔掉,保留8位,最终结果为00000101。计算结果正确。
计算22-(-17),22的二进制表示为00010110,-17的二进制表示为11101111。判断运算符为-,所以把-17求补码,为00010001。然后加00010110,结果为00100111。计算结果正确。
从上面的例子可以看出,用了补码之后,无论正负数,都可以统一处理了,并且化减法为加法。
所有的运算最后统一到加法了。读者是否感觉到补码简便了呢?
2.4.2 自己做个加法器
先看加法运算表:

因为是二进制,所以加法表很简单。
这个加法表中有一个不同之处,就是1+1=10,结果有两位,前一位是进位,后面的是值。需要分开处理,考虑进位,得到新的加法表:

再把上表分开表示成加法表和进位表。
加法表:

进位表:

仔细看上表。加法表跟以前提到过的逻辑异或(XOR)操作是同一张表,进位表跟逻辑与(AND)操作是同一张表。这样可以用逻辑门电路实现加法,用一个异或(XOR)门和一个与(AND)门。二进制下,0/1既是数又是状态,所以逻辑运算和算术运算在电路这一层统一了。
用门电路,这个加法运算可如下图所示进行搭建。

半加器简化图如下图所示。

这个加法器只能计算一个bit的加法,还不会考虑进位,所以把它叫半加器。
接着看看多个bit位的加法器如何做,有了半加器,这个任务不困难,把A+B的和与前一步的进位再用半加器加一次,再把两个半加器的进位或门输出成本加法器的进位就可以了。即通过两个半加器加上一个或门组合成一个全加器。

简化图如下图所示。

接下来,把这个加法器组合成8位的加法器。

相加的数据位A、B,从0~7每一位分别输入,前一位的进位输入到下一位。这样串联起来。
简化图如下图所示。

现在看是不是长得有点像一个芯片的样子了?很有科技感。
不过现在同时也看到了,实现一个简单的运算就需要很多电子元器件组合起来,非常复杂,可想而知真正的计算机有多复杂。
0和1单独拿出来做不了什么事情,这些基本门电路单个也没有什么功能,但是组合在一起可以达到神奇的效果。20世纪五六十年代仙童公司Robert Noyce与得克萨斯州仪器公司Kilby发明了集成电路,它通过半导体工艺把所需的晶体管、电阻、电容等元件及它们之间的连接导线全部集成在一小块硅片上。
现在在一个指甲盖大小的硅片上能放上亿个元器件,比如Intel Pentium的i7大概集成了14亿个晶体管。工艺是按照摩尔定律发展的,当价格不变时,集成电路上可容纳的元器件的数目,约每隔18~24个月便会增加一倍,性能也将提升一倍。这是一种指数级的增长,总有一天会将人类带到临界点。
现在只需要花几元钱就可以买到一个芯片,不要忘记这是经过了多少人多少年努力的结果。
当一个CPU的成本降到一张纸的成本的时候,奇点可能会来临,人类历史可能会进入下一个阶段。
想想很奇妙,一个简单的整数,一个简单的加法,通过叠层累加,最后构成了庞大的算术体系。