二进制 (Draft)
语言只不过是一种编码。
“猫”在英文中是“cat”,在西班牙语里是“gato”,在法语里是“chat”,在德语里是“Katze”。
然而在这个星球上,几乎所有人都是用以下方式来书写数字:
1 2 3 4 5 6 7 8 9 10
这是一种抽象的编码,3可以表示3个什么东西,但是需要通过上下文才能确定,比如苹果的数量、电视频道、比赛得分等等。
我们也不一定需要用3来表示3个苹果,我们同样可以用“11”来表示,只要我们能忘记数字10。
十进制数
大多数文明都是建立在以10为基数的数字系统上的,不过有的时候是以5为基数,比如罗马数字:
I, V, X, L, C, D, M
I, II, III, IV, V, VI, VII, VIII, IX, X
MMXXII
与上面对应的阿拉伯数字是:
1, 5, 10, 50, 100, 500, 1000
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
2022
相比其他数字系统,阿拉伯数字不同的是:
- 阿拉伯数字系统是和位置相关的,一个数字的位置不同,其代表的数量也不同。(很显然,10和100是不同的。)
- 没有表示10的符号。(是的,10并不是一个符号,而是由1和0组成的。罗马数字有单独表示10的符号X)
- 但是有比表示10的符号更重要的符号:0。(0使位置计数法成为可能,因此10(一零)可以表示10,也可以将202和220区分开来。后面我们会发现,0也简化了与位置无关的数字系统中的一些非常复杂的运算,尤其是乘法和除法。)
阿拉伯数字的整体结构是:
4825 = 4000 + 800 + 20 + 5
= 4 * 1000 +
8 * 100 +
2 * 10 +
5 * 1
= 4 * 10^3 +
8 * 10^2 +
2 * 10^1 +
5 * 10^0
每个位置代表10的一个整数次幂,所以我们不需要一个专门的符号来表示数字“10”,因为我们可以将1放在不同的位置,并用0作为占位符。
同样的方式可以用于小数点右边
4825.684
= 4 * 1000 +
8 * 100 +
2 * 10 +
5 * 1 +
6 / 10 +
8 / 100 +
4 / 1000
= 4 * 10^3 +
8 * 10^2 +
2 * 10^1 +
5 * 10^0 +
6 * 10^-1 +
8 * 10^-2 +
4 * 10^-3
阿拉伯数字的“闪光”之处
3 + 4 = 7
30 + 40 = 70
300 + 400 = 700
任何长度的十进制数相加时,只要根据一种方法将问题分成几步即可,而每个步骤最多只是将两个一位数字相加而已。
3 * 4 = 12
30 * 40 = 1200
300 * 400 = 120000
对于乘法,仍然只需要将问题分解成几步,做加法和一位数的乘法即可。
位置计数系统的好处是:对非十进制的系统而言,它仍然是易于实现计数的。
10(一零)在各种进制中的使用:
十进制
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
八进制
0, 1, 2, 3, 4, 5, 6, 7, 10
四进制
0, 1, 2, 3, 10
二进制
0, 1, 10
二进制数
二进制和其他进制没有什么区别,但是有一点特殊的是,它是最简单的数字系统,只有两个数字0和1。
二进制的加法和乘法运算将是你真正喜欢二进制的地方。
加法表非常简单
+ 0 1
0 0 1
1 1 10
乘法表甚至更简单(因为它基于两个基本的乘法规则:任何数乘以0结果都为0,任何数乘以1,结果都是这个数本身)
* 0 1
0 0 0
1 0 1
二进制数字系统还在算术与电子技术之间架起了一座桥梁。
开关、电线、灯泡,还有继电器等都可以用来表示二进制数0和1。
大约在1948年,美国数学家John Wilder Turkey意识到随着计算机的普及,二进制数很可能会在未来发挥更重要的作用,于是他决定创造一个新的、更短的词语来代替使用起来不方便的 binary digit。他曾经考虑使用 bigit 和 binit,但是最终还是选择了 bit(比特)。
信息
当我们用竖起拇指或者不竖起拇指来表示对一部电影的评价时,一个人是否竖起拇指就是一个比特的信息,两个人是否竖起拇指传达了两个比特的信息,两个比特有四种可能性。
这里最本质的概念是,信息是指多个可能性中的一种。
换句话说,所有可以被转换成对两种或多种可能性的选择的信息,都可以用比特来表示。
如果我们知道要表示多少种可能性,那么就可以计算出需要多少个比特位,所要用到的方法叫做以2为底的对数运算。
log2128 = 7
log2256 = 8
以2为底128的对数是7,以2为底256的对数是8,那么假如我们要表示200种可能,就需要8个比特位。
后面我们会知道比特可以表示文字、图片、音乐、电影。但是,从根本来说,比特就是数字。在用比特表示其他信息的时候我们要做的就是计算有多少种可能性。这决定了我们需要的比特位数,以便每种可能性都可以分配到一个编号。
比特在逻辑学中也很重要。逻辑学是哲学和数学的奇特融合,其主要目的就是确定某个陈述是真还是假。真和假同样可以表示为1和0。