计算机如何做减法
计算机如何做减法
最近在看《编码》这本书,发现自己对于计算机的减法有了更深的理解
一、预备知识
- 自然数
- 整数
- 集合
二、什么是减法
什么是减法呢,粗浅的定义
从一个数中扣除另一个数
换一个角度试试
一个数加上一个负数
从这个角度说,加法也可以看做另一种加法,只不过其中一个加数是负数
如果数字中只有自然数,是不是只使用加法就可以了呢
在解决这个问题之前,先回顾一下整数与自然数
三、整数与自然数
先假设数字范围是 -20 ~ 19,一共40个数字
则整数的全集是:
-20, -19, -18, ...... , -3, -2, -1, 0, 1, 2, 3, ...... , 17, 18, 19
自然数的全集是:
0, 1, 2, 3, ...... , 17, 18, 19
让两个集合的数字数目相同,自然数的全集可以改成
0, 1, 2, 3, ...... , 17, 18, 19, 20, 21, 22, ...... , 38, 39
对比数目相同的两个集合,如果让20对应-20,21对应-19,以此类推,就形成了一个数字循环,如下表所示:
| 整数 | 自然数 |
|---|---|
| -20 | 20 |
| -19 | 21 |
| -18 | 22 |
| -17 | 23 |
| -16 | 24 |
| -15 | 25 |
| -14 | 26 |
| -13 | 27 |
| -12 | 28 |
| -11 | 29 |
| -10 | 30 |
| -9 | 31 |
| -8 | 32 |
| -7 | 33 |
| -6 | 34 |
| -5 | 35 |
| -4 | 36 |
| -3 | 37 |
| -2 | 38 |
| -1 | 39 |
| 0 | 0 |
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 5 |
| 6 | 6 |
| 7 | 7 |
| 8 | 8 |
| 9 | 9 |
| 10 | 10 |
| 11 | 11 |
| 12 | 12 |
| 13 | 13 |
| 14 | 14 |
| 15 | 15 |
| 16 | 16 |
| 17 | 17 |
| 18 | 18 |
| 19 | 19 |
四、如何将减法转化为加法
在 -20 ~ 19 这个范围内,使用新的自然数集合,没有了负数也就不需要使用减法
对照上表中左右列的数字,举个例子:
11 +(-9)= 11 + 31 = 42
注意,我们的表中没有42这个数字,这个叫做溢出,去除多余的部分,结果为2
可以试试其他数字的减法,都可以使用这个方法来计算
五、为什么可以这样转换
举个例子,基于24小时制,假设现在是晚上18点,7个小时后是几点?凌晨1点
为什么不是25点,因为没有25点,相对于24小时制,25点溢出了,超出的部分才是现在的时间
六、总结
这种数字的表示方法叫做补码,关于补码的概念,这里不深入讨论
这种类似钟表的数字循环,可以有效的帮助我们将负数映射为对应溢出数字
每一个数字都有对应的补码,将数字转化为补码后,数字集合中将不再有负数,故可以仅通过加法运算
在计算机中,数字的一律用补码来表示,故计算机中的减法是借用补码和加法来实现的