登陆后访问



H
I
S
T
O
R
Y

为你揭开进制的秘密

内容节选自《程序员的数学》([日]结城浩著,管杰译,人民邮电出版社)已获图灵许可,由【好玩的数学】编辑整理,标题为小编所加,特此感谢。
一、小学一年级的回忆
以下是小学一年级时发生的事,我依然记忆犹新。
“下面请打开本子,写一下‘十二’。”老师说道。于是,我翻开崭新的本子,紧握住削尖了的铅笔,写下了这样大大的数字。

图1
老师走到我跟前,看到我的本子,面带微笑亲切地说:“写得不对喔。应该写成 12 喔。”
当时我是听到老师说“十二”,才写下了 10 和 2。不过那样是不对的。众所周知,现在我们把“十二”写作 12。
而在罗马数字中,“十二”写作 XII。X 表示 10,I 表示 1。II 则表示两个并排的 1,即 2。也就是说,XII 是由 X 和 II 组成的。
如同“十二”可以写作 12 和 XII,数字有着各种各样的计数法。12 是阿拉伯数字的计数法,而 XII 是罗马数字的计数法。无论采用哪种计数法,所表达的“数字本身”并无二致。下面我们就来介绍几种计数法。
二、10进制计数法
1. 什么是 10 进制计数法?

我们平时使用的是 10 进制计数法。
使用的数字有 0、1、2、3、4、5、6、7、8、9 共 10 种。
数位有一定的意义,从右往左分别表示个位、十位、百位、千位……
(注:这里的“种”指的是数字的种类,用来说明 10 进制和 2 进制中数字复杂程度的差异。如 2561 中包含四种数字,而 1010 中只包含两种数字。——译者注)
以上规则在小学数学中都学到过,日常生活中也一直在用,是众所周知的常识。在此权当复习,后面我们将通过实例来了解一下 10 进制计数法。
2. 分解 2503
首先,我们以 2503 这个数为例。2503 表示的是由 2、5、0、3 这 4 个数字组成的一个称作 2503 的数。

图2
这样并排的数字,因数位不同而意义相异。
2 表示“1000 的个数”。
5 表示“100 的个数”。
0 表示“10 的个数”。
3 表示“1 的个数”。
综上所述,2503 这个数是 2 个 1000、5 个 100、0 个 10 和 3 个 1 累加的结果。用数字和语言来冗长地说明有些无趣,下面就用图示来表现。

如图,将数字的字体大小加以区别,各个数位上的数字 2、5、0、3 的意义便显而易见了。1000 是 10×10×10,即 103(10的 3 次方),100 是 10×10,即 102 (10 的 2 次方)。因此,也可以写成如下形式(请注意箭头所示部分)。

再则,10 是 101(10 的 1 次方),1 是 100(10 的 0 次方 ),所以还可以写成如下形式。

千位、百位、十位、个位,分别可称作 103 的位、102 的位、101 的位、100 的位。10 进制计数法的数位全都是 10n 的形式。这个 10 称作 10 进制计数法的基数或底。
基数 10 右上角的数字——指数,是 3、2、1、0 这样有规律地顺次排列的,这点请记住。

图3
三、2进制计数法
下面讲解 2 进制计数法。
1. 什么是 2 进制计数法?
计算机在处理数据时使用的是 2 进制计数法。从 10 进制计数法类推,便可很快掌握它的规则。
使用的数字只有 0、1,共 2 种。
从右往左分别表示 1 位、2 位、4 位、8 位……

用 2 进制计数法来数数,首先是 0,然后是 1,接下去……不是 2,而是在 1 上面进位变成 10,继而是 11,100,101……
下表展示了 0 到 99 的数的 10 进制计数法和 2 进制计数法。

表1:0 到 99 的数的 10 进制计数法和 2 进制计数法
2. 分解 110
在此,我们以 2 进制表示的 1100(2 进制数的 1100)为例来探其究竟。

图4
和 10 进制计数法一样,并排的数字,各个数位都有不同的意义。从左往右依次为:
1 表示“8 的个数”。
1 表示“4 的个数”。
0 表示“2 的个数”。
0 表示“1 的个数”。
也就是说,2 进制的 1100 是 1 个 8、1 个 4、0 个 2 和 0 个 1累加的结果。这里出现的 8、4、2、1,分别表示 23、22、21、20。即 2 进制计数法的 1100,表示如下意思。

图5
如此计算就能将 2 进制计数法的 1100 转换为 10 进制计数法。

由此可以得出,2 进制的 1100 若用 10 进制计数法来表示,则为 12。
3. 基数转换
接下来我们试着将 10 进制的 12 转换为 2 进制。这需要将 12 反复地除以 2(12 除以 2, 商为 6 ;6 再除以 2,商为 3 ;3 再除以 2……),并观察余数为“1”还是“0”。余数为 0 则表示“除完了”。随后再将每步所得的余数的列(1 和 0 的列)逆向排列,由此就得到 2 进制表示了。

图6: 用2 进制表示12
同样地,我们试将 10 进制的 2503 转换为 2 进制计数法。

图7:用2进制表示2503
我们从图 1-2 可以知道 2503 用 2 进制表示为 100111000111。各个数位的权重如下:

在 10 进制中,基数为 10,各个数位是以 10n 的形式表现的。而 2 进制中,基数为 2, 各个数位是以 2n 的形式表现的。从 10 进制计数法转换为 2 进制计数法,称作 10 进制至 2 进制的基数转换。
4. 计算机中为什么采用 2 进制计数法
计算机中一般采用 2 进制计数法,我们来思考一下原因。计算机在表示数的时候,会使用以下两种状态。
开关切断状态
开关连通状态
虽说是开关,但实际上并不需要机械部件,你可以想象成是由电路形成的“电子开关”。总之,它能够形成两种状态。这两种状态,分别对应 0 和 1 这两个数字。
开关切断状态    …    0
开关连通状态    …    1
1 个开关可以用 0 或 1 来表示,如果有许多开关,就可以表示为许多个 0 或 1。你可以想象这里排列着许多开关,各个开关分别表示 2 进制中的各个数位。这样一来,只要增加开关的个数,不管是多大的数字都能表示出来。
当然,做成能够表示 0 ~ 9 这 10 种状态的开关,进而让计算机采用 10 进制计数法,这在理论上也是可能的。但是,与 0 和 1 的开关相比,必定有更为复杂的结构。
另外,请比较一下图 1-3 和图 1-4 所示的加法表。2 进制的表比 10 进制的表简单得多吧。

图8:10 进制的加法表

图9:2进制的加法表
若要做成 1 位加法的电路,采用 2 进制要比 10 进制更为简便。
不过,比起 10 进制,2 进制的位数会增加许多,这是它的缺点。例如,在 10 进制中2503 只有 4 位,而在 2 进制中要表达同样的数则需要 100111000111 共 12 位数字。这点从表 1-2 中也显而易见。
人们觉得 10 进制比 2 进制更容易处理,是因为 10 进制计数法的位数少,计算起来不容易发生错误。此外,比起 2 进制,采用 10 进制能够简单地通过直觉判断出数值的大小。人的两手加起来共有 10 个指头,这也是 10 进制更容易理解的原因之一。
不过,因为计算机的计算速度非常快,位数再多也没有关系。而且计算机不会像人类那样发生计算错误,不需要靠直觉把握数字的大小。对于计算机来说,处理的数字种类少、计算规则简单就最好不过了。
让我们来总结一下。
在 10 进制计数法中,位数少,但是数字的种类多。
→对人类来说,这种比较易用。
在 2 进制计数法中,数字的种类少,但是位数多。
→对计算机来说,这种比较易用。
鉴于上述原因,计算机采用了 2 进制计数法。
人类使用 10 进制计数法,而计算机使用 2 进制计数法,因此计算机在执行人类发出的任务时,会进行 10 进制和 2 进制间的转换。计算机先将 10 进制转换为 2 进制,用 2 进制进行计算,再将所得的 2 进制计算结果转换为 10 进制。

图10:人类使用计算机进行计算的情形
四、按位计数法
下面来介绍按位计数法。
1. 什么是按位计数法
我们学习了 10 进制和 2 进制两种计数法,这些方法一般称作按位计数法。除了 10 进制和 2 进制以外,还有许多种类的按位计数法。在编程中,也常常使用 8 进制和 16 进制计数法。
8 进制计数法
8 进制计数法的特征如下:

使用的数字有 0、1、2、3、4、5、6、7 共 8 种。
从右往左分别为 80 的位、81 的位、82 的位、83 的位……(基数是 8)
16 进制计数法
16 进制计数法的特征如下:
使用的数字有 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F 共 16 种。
从右往左分别为 160 的位、161 的位、162 的位、163 的位……(基数是 16)
在 16 进制计数法中,使用 A、B、C、D、E、F(有时也使用小写字母 a、b、c、d、e、f)来表示 10 以上的数字。
N 进制计数法
一般来说,N 进制计数法的特征如下:
使用的数字有 0,1,2,3,…,N-1,共 N 种。
从右往左分别为 N0 的位、N1 的位、N2 的位、N3 的位……(基数是 N)
例如,N 进制计数法中,4位数 a3a2a1a0 为a3×N3+a2×N2+a1×N1+a0×N0(a3、a2、a1、a0是0~N-1中的数字。)
2. 不使用按位计数法的罗马数字
按位计数法在生活中最为常见,因此人们往往认为这种方法是理所当然的。实际上, 在我们身边也有不使用按位计数法的例子。
例如,罗马计数法。
罗马数字至今还常常出现在钟表表盘上。

图11:使用罗马数字的钟表表盘
还有,在电影最后放映的演职员名单中,也会出现表示年号的 MCMXCVIII 等字母。这也是罗马数字。
罗马计数法的特征如下:
数位没有意义,只表示数字本身
没有 0
使用 I(1)、V(5)、X(10)、L(50)、C(100)、D(500)、M(1000) 来记数
将并排的数字加起来,就是所表示的数。
例如,3 个并排的 I(III)表示 3,并排的 V 和 I(VI)表示 6,VIII 表示 8。
罗马数字的加法很简单,只要将罗马数字并排写就可以得到它们的和。比如,要计算1+2,只要将表示 1 的 I 和表示 2 的 II 并排写作III 就行了。但是,数字多了可就不太简单了。
例如,计算 3+3 并不是把 III 和 III 并排写作 IIIIII,而是将 5 单独拿出来写作 V,所以 6 就应该写作 VI。CXXIII(123) 和 LXXVIII(78) 的加法, 也不能仅仅并排写作CXXIIILXXVIII,而必须将 IIIII 转换为 V,VV 转换为 X,XXXXX 转换为 L,再将 LL 转换为 C,如此整理最后得到 CCI(201)。在“整理”罗马数字的过程中,必须进行与按位计数法的进位相仿的计算。
罗马计数法中还有“减法规则”。例如 IV,在 V 的左侧写 I,表示 5-1,即 4(在钟表表盘上,由于历史原因也有将 4 写作 IIII 的)。
让我们试着将罗马数字的 MCMXCVIII 用 10 进制来表示。
可以发现,MCMXCVIII 表示的就是 1998。罗马数字真是费劲啊!

 

声明:文章转自【好玩的数学】微信公众号,版权归原作者所有,转载仅供学习使用,不用于任何商业用途,如有侵权请联系删除,谢谢。

相关文章

奇妙的数字:巧合数

Posted by - November 10, 2017 1552
世界上,无时无刻不在发生着一些看似偶然的巧合,有让人遗憾的,也有让人庆幸的,在数学上,也有很多的巧合。

数学之美|填色游戏

Posted by - November 09, 2017 1801
人们提起数学之“美”时常意指其抽象涵义,罗素称之为“朴素冷峻之美……庄严纯净,能够达到严格的完美”。然而,人类也一向从数学中发现审美上的...