十二、附录 A:数字系统
我们人类习惯于用十进制计数:我们有十个数字,通过使用 1、10、100 和 1000 位(等等)来构建数字。当你看到某处写下“327”时,你的脑袋在计算(3 * 102)+(2 * 101)+(7 * 100)= 300+20+7 = 327。我们太习惯于以 10 为基数,以至于经常忘记这只是另一种计数方式。
二进制的
例如,计算机不会用十进制来思考。事实上,他们只理解数字 0 和 1,使他们的数字系统以 2 为基数,或二进制。(为什么只是 0 和 1?计算机依赖于电信号,这些电信号在任何给定的时间都可以是开[1]或关[0]。【981】
这意味着计算机使用一位、两位、四位和八位(以此类推),而不是一位、十位和百位。二进制数中的每一位只能包含一个 0 或 1;1 之后,你要向上跳一个位置。用二进制从零数到十,你会数 0,1,10,11,100,101,110,111,1000,1001,1010。每次你把 1 加到 1 上,它就滚回 0,并把 1 向前带到它左边的位置。这就像我们人类在小学学习加法时,当我们把两个数字加起来超过 10 时,我们知道要“携带 1”。
二进制数可以像十进制数一样分解:二进制数 10101 在十进制数中计算为(1 * 24)+(0 * 23)+(1 * 22)+(0 * 21)+(1 * 20)= 16+0+4+0+1 = 21。
二进制对于引擎盖下的计算机来说很棒,但是写下来就不是很有效率了。用二进制写的数字比用十进制写的数字多三倍。【ZZ】十进制(四位数)的数字 1776,二进制(十一位数)就是 11011110000。
十六进制的
因此,技术专家经常求助于一种叫做十六进制的系统,来更简洁地书写计算机使用的数字。十六进制将二进制信息的四个数字压缩成一个数字(因为 16 = 24),这使得它成为一种非常有效的记录计算机使用的数字的方法。
16 进制使用 0-9 加上字母 A-F(这是 16 个可能的数字),而不是 0 和 1 或 0-9。如果你用十六进制从零数到二十,你会数到 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,10,11,12,13,14。没错,A 是我们的十,F 是我们的十五。
(数字系统的大杂烩让你困惑了吗?幸运的是,有一个解决办法:因为十六进制通常看起来很像十进制,所以技术专家经常在十六进制数字的前面加上标记“0x”。)
像二进制数一样,十六进制数可以很容易地转换成十进制数。0xB5D 在十进制上是(11 * 162)+(5 * 161)+(13 * 160)= 2816+80+13 = 2909。0x53 在十进制上是(5 * 161) + (3 * 160) = 80 + 3 = 83。(这就是 0x 标记真正派上用场的地方。)
十六进制比十进制更紧凑,因为十六进制使用更多的数字。例如,记住 1776 是十进制的四位数和二进制的十一位数。在十六进制中,它被表示为 0x6F0 —只有三位数!
| 小数 | 二进制的 | 十六进制的 | | 0 | 0 | 0 | | 一 | 一 | 一 | | 2 | 10 | 2 | | 3 | 11 | 3 | | 四 | 100 | 四 | | 5 | 101 | 5 | | 6 | 110 | 6 | | 七 | 111 | 七 | | 8 | 1000 | 8 | | 9 | 1001 | 9 | | 10 | 1010 | A | | 11 | 1011 | B | | 12 | 1100 | C | | 13 | 1101 | D | | 14 | 1110 | E | | 15 | 1111 | F | | 16 | 10000 | 10 |
当你开始窥视你的应用程序和小工具时,十六进制无处不在。电脑错误代码【982】和视频游戏作弊代码【983】通常用十六进制(或者用专业术语来说就是“hex”)编写。)如果你在文本编辑器中打开一个图像文件,你会看到十六进制。【984】
当然,比特币喜欢十六进制,尤其是哈希:比特币使用十六进制来编码块哈希【985】和交易哈希。【986】
Windows 臭名昭著的“死亡蓝屏”之一,当你的电脑崩溃时显示。在底部你会看到十六进制的错误代码。来源:维基媒体【987】
比特币的基础
对于一个数字的超紧凑表示,您可以使用 base-64,它使用 64 个数字:10 个阿拉伯数字、26 个大写字母、26 个小写字母以及特殊字符“+”和“/”。【988】
base-64 的问题是它不太可读。它使用了几个容易混淆的符号:小写的“O”,大写的“O”,和数字 0,小写的“l”(如“llama”),大写的“I”(如“India”),和数字 1。因此,如果你试图,比如说,键入一个你从一张纸上读出的基数为 64 的数字,你很有可能会出错。有些小众问题影响“+”、“/”;例如,一些文本字段不接受非字母数字字符。【989】
Satoshi 开发了 base-58 数字系统来解决这些问题。它包括所有的 base-64 数字减去“+”、“/”、大写“O”、数字 0、大写“I”(如“India”)和小写“l”(如“llama”)。这就剩下 58 个可能的数字,仍然足以简洁地表示一个数。【AAA】比特币相当频繁地使用 base-58;这是私钥、公钥和地址的标准格式。【990】
这个纸钱包里有一把私人钥匙和用 base-58 写的地址。【991】