===》点我返回目录《===
我们继续深究下去,打破砂锅问到底。
上述介绍的补码系统粗看起来这是比较奇怪的表示,实际上不然,了解了几种运算后,就会明白补码表示是多么简便。
我们来看两个数的加减运算。a+b或者a-b。如果用我们平时数学上的表示,我们需要分别判断a和b的符号,加上运算符,就有8种组合:+++,++-,-++,-+-,--+,---,+-+,+--。我们的内部电路的运算需要判断八种情况,会比较复杂。
如果用补码,因为补码自身已经处理了正负数,所以只需要判断运算符是+还是-,如果是+就把a和b直接相加,如果是-,就先对b再次求补码,然后加a。
举例如下:
计算17+22=39,用八位二进制表示为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。正确。
从上面的例子可以看出,用了补码之后,无论正负数,都可以统一处理了,并且化减法为加法。
没错,所有的运算最后统一到加法了。你领略到补码的简便了吧。
我们自己试着做一个加法器。
先看加法运算表:
0 1
0 0 1
1 1 10
因为是二进制,所以加法表很简单。
这个加法表里有一个不同之处,就是1+1=10,结果有两位,前一位是进位,后面的是值。我们需要分开处理,考虑进位,得到新的加法表:
0 1
0 00 01
1 01 10
再把上表分开表示成加法表和进位表:
加法表
0 1
0 0 1
1 1 0
进位表
0 1
0 0 0
1 0 1
我们仔细看上表。加法表跟我们以前提到过的逻辑异或XOR操作是同一张表,进位表跟逻辑与AND操作是同一张表。这样我们可以用逻辑门电路实现加法,用一个异或XOR门和一个与AND门。二进制下,0/1,既是数又是状态,所以逻辑运算和算术运算在电路这一层统一了。
用门电路,这个加法运算这么搭建:
简化图为:
但是这个加法器弱爆了,只能算一个bit的加法,还不会考虑进位,我们把它叫半加器。
那我们就接着看看多个bit位的加法器怎么做,有了半加器,这个任务不困难,把A+B的和与前一步的进位再用半加器加一次,再把两个半加器的进位或门输出成本加法器的进位就可以了。即通过两个半加器加上一个或门组合成一个全加器。
简化图:
接下来,我们把这个加法器组合成8位的加法器。
相加的数据位A,B,从0到7每一位分别输入,前一位的进位输入到下一位。这样串连起来。
简化图为:
现在看是不是长得有点像一个芯片的样子了?很有科技感。
不过我们现在同时也看到了,实现一个简单的运算就需要好多电子元器件组合起来,非常复杂,闭眼就可以想到真正的计算机有多复杂。好在通过工程的方式,这些器件可以一点点组成更大的器件,越组装越大,最后我们花几十美元就可以直接买到一个叫CPU的组件了。
0和1单独拿出来做不了什么事情,这些基本门电路单个也没有什么功能,但是组合在一起可以达到神奇的结果。上个世纪五六十年代仙童公司Robert Noyce与德州仪器公司Kilby发明了集成电路,它通过半导体工艺把所需的晶体管、电阻、电容等元件及它们之间的连接导线全部集成在一小块硅片上。
现在在一个指甲盖大小的硅片上能放上亿个元器件,比如Intel Pentium的i7大概集成了14亿个晶体管。工艺是按照Moore定律发展的,当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。这是一种指数级的增长,总有一天会将人类带到临界点。
现在你只需要花几块钱就可以买一个芯片,不要忘记这是费了多少人多少年努力的结果。指甲壳大小的一块芯片,汇聚了人类千年万年的智慧。
当一个CPU的成本降到一张纸的成本的时候,奇点就会来临,人类历史必将进入下一个阶段。
想想很奇妙,一个简单的整数,一个简单的加法,通过叠层累加,最后构成了庞大的算术体系。为什么科学家会不停地探索大统一理论?就是基于这个信念:这个世界能用一个统一的理论解释全部的现象。