计算机如何做减法
计算机如何做减法
最近在看《编码》这本书,发现自己对于计算机的减法有了更深的理解
一、预备知识
- 自然数
- 整数
- 集合
二、什么是减法
什么是减法呢,粗浅的定义
从一个数中扣除另一个数
换一个角度试试
一个数加上一个负数
从这个角度说,加法也可以看做另一种加法,只不过其中一个加数是负数
如果数字中只有自然数,是不是只使用加法就可以了呢
在解决这个问题之前,先回顾一下整数与自然数
三、整数与自然数
先假设数字范围是 -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点溢出了,超出的部分才是现在的时间
六、总结
这种数字的表示方法叫做补码,关于补码的概念,这里不深入讨论
这种类似钟表的数字循环,可以有效的帮助我们将负数映射为对应溢出数字
每一个数字都有对应的补码,将数字转化为补码后,数字集合中将不再有负数,故可以仅通过加法运算
在计算机中,数字的一律用补码来表示,故计算机中的减法是借用补码和加法来实现的