Vortex,B站 space.bilibili.com/10252845 阅读原文 来尝试一下写科普文~ 希望这篇有关“二进制”的科普文章连初中生甚至小学生都能听懂。 1 什么是二进制 所谓的“二进制[1]”,就是一种仅用“1”和“0”的排列组合来表示具体数值的,一种记数方法。 例如“1001 1011”就是一个二进制数,它的每位都是非 1 即 0 的,不会出现 2 或者 3 这样的其它数字。但是仅通过 1 和 0 的组合是如何表示某个具体数值的? 2 二进制的数值例子 我们先从一个具体例子开始: 图 1,二进制数“1101 0110” 这是一个二进制数(图 1),那么它对应的数值是什么呢?它对应的数值是这样计算的: 首先我们把它的每位分开,然后分别乘上 1, 2, 4, 8, 16, ... 64, 128(图 2): 图 2,每位分开并分别乘上 1, 2, 4, 8, ... 最后将它们加起来,就得到了这个二进制数对应的数值(图 3): 3,将所有结果加起来,就得到了这个二进制数对应的数值“214” 即,二进制数“1101 0110”所对应的数值是“214”。 现在你可以试着计算一下二进制数“1000 1000”所对应的数值! 3 我们生活中所采用的计数法 看完上面这段说明后,是不是还是感觉晕乎乎的?为什么要设计出这么反人类的计法?以及,它真的可以表示所有数值吗? 其实,二进制和我们生活中所采用的记数方法,阿拉伯数字系统是一样的。 比如,为什么我们会把“514¥”念作“五百一十四 块钱”,而不是“五一四 块钱”呢? 其实,念出“五百一十四”的时候,我们就已经进行了一遍,之前所演示的相乘并求和的过程(图 4)。 图 4,“五百一十四”所对应的数值 那么现再回过头去看下上面二进制的求值过程,是不是又觉得二进制变得亲切了起来呢? 其实二进制和我们平时所使用的记数法是一样的,只不过我们平常会使用十个不同的数字符号来表示数值:“0,1,2,3,4,5,6,7,8,9”,并且每位需要分别乘上“1, 10, 100, 100...”[2]。 而在二进制的世界中只有“1”和“0”,并且每位分别乘上的是“1, 2, 4, 8, 16, ...”。 4 位权 这个每位分别乘上的固定数值,就是所谓的“位权(weight)”,即“每位的权重”。 前面说了,在我们平常生活所使用的记法中,每位的位权分别是“1, 10, 100, 1000”,一般的,从第 1 位开始,第 位的位权其实就是 。而对于二进制,第 位的位权则为 。 一般地,“ 进制”第 位的位权就是: 例如三进制第 位的位权就是 。 所以,我们平时生活所使用的记法,也可以叫做“十进制”。 当然,计算机的专业人士会比较喜欢从“0”开始数(图 5),那么此时第 位的位权公式实际上应当是 (图 5)。 图 5,从 0 开始数 从 0 开始数的话,位权公式就变成了更简洁的“ ”,也许他们才是对的呢~ 从这里开始,下文中所有数都是从第 0 位开始数的,即第 位位权为 ,而不是 。 4 位权与进位 那么“位权(weight)”的实际意义究竟是什么呢?其实它规定了进位的规则。 比如,十进制第 位的位权为 ,具体地,从第 0 位开始,它的每位位权分别是“1, 10, 100, 1000...”。 我们小学就学过,十进制的加法是逢十进一的,个位满十,就向十位进一。这意思可不就是,1 个 十位的“1” 代表 10 个 个位的“1” 吗? 因此,十位的位权是“10”。然后,1 个百位的代表 10 个十位,因此百位的位权是“100”,以此类推。 那么二进制呢?从第 0 位开始,二进制每位位权分别是“1, 2, 4, 8”,或者说 。 在二进制中,1 个 第 2 位 代表 2 个 第 1 位,1 个 第 1 位 代表 2 个 第 0 位。所以,二进制是“逢二进一”的。 那么一般地,“ 进制”就是“逢 进一”的。这也是为什么,它的名字叫做 “进”制。 5 小结 我们生活中所使用的记数系统也叫“十进制”,它是“逢十进一”的。 “二进制”是“逢二进一”的。 从第 0 位开始数,“ 进制”第 位位权为“ ”。 “ 进制”是“逢 进一”的。 对于“ 进制数”,将它的每位乘上对应的位权,再将它们全部加起来,就能得到这个数对应的数值 6 扩展 下面是一些扩展思考题: 二进制第 位小数的位权是多少? 从第 0 位开始数, 位 进制正整数的最小值和最大值分别是多少? 对于所有的整数,都能分别找到唯一对应的二进制表示吗? 对于所有整数,都能分别找到唯一对应的 进制表示吗? 其实第 1 个问题超纲了,第 3、4 个问题相对而言也比较难。但是它们都非常值得思考。 阅读原文