《编码 隐匿在计算机软硬件背后的语言》 - 加法是怎么计算的
2018-05-12 本文已影响131人
秦砖
IT业混了这么久,在没看到这本书之前,如果有人向我提出这么个问题,我第一反应应该是愣一下,然后扯一堆计算机通过二进制将两个数字加到一块等相关内容,但具体用的是怎么样的机制,我是回答不出来的。那么看下这本书中讲述的计算机是如何做加法的吧:
+ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
2 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
3 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
4 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
5 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
6 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
7 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
8 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
9 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
上面是幼儿园小朋友就要学习的加法基础,它可以称得上是整个数学的基石了吧。同样计算机也有自己的计算基石,如下:
+ | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 10 |
如果分的再细一点,可以将这张表分成加法表与进位表:
加法表 | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 0 |
进位表 | 0 | 1 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
能够发现加法表中做的是异或运算,而进位表中则做的是与运算。可以通过以下电路实现单位二进制数的加法:
半加器电路实现忽略电路实现细节的黑盒半加器
A与B相加的结果通过进位输出与加和输出一同表示。半加器只能做一位二进制的加法,可以将两个半加器组合成全加器。
全加器电路实现忽略电路实现细节的黑盒全加器
全加器实现了事进位的一位二进制数的加法,将多个全加器连起来,很自然地就能实现多位二进制数的加法了。
8位加法器同样可以将8位加法器组合在一起形成16位加法器。到这里,是不是觉得原来计算机做的完全不是加法,而是电流在电路中的正常流动罢了,只是因为人类设计了其流动的方式进而达到了自己计算的目的。