CHAPTER 1 第 1章 0的故事 ——无即是有 ◎课前对话 老师:1,2,3的罗马计数法是 I,II,III。学生:加法很简单嘛。 I + II,只要将 3个 I并排写就行了。老师:不过 II + III可不是 IIIII,而是 V喔!学生:啊,是这样啊!老师:没错,如果数目变大,那数起来可就费劲啦! 本章学习内容 本章将学习有关 “0”的内容。 首先,介绍一下我们人类使用的 10进制和计算机使用的 2进制,再讲解按位计数法,一起来思考 0所起的作用。乍一看, 0仅仅是表示 “什么都没有 ”的意思,而实际上它具有创建模式、简化并总结规则的重要作用。 小学一年级的回忆 以下是小学一年级时发生的事,我依然记忆犹新。 “下面请打开本子,写一下 ‘十二 ’。”老师说道。于是,我翻开崭新的本子,紧握住削尖了的铅笔,写下了这样大大的数字。 老师走到我跟前,看到我的本子,面带微笑亲切地说: “写得不对喔。应该写成 12喔。 ” 当时我是听到老师说 “十二 ”,才写下了 10和 2。不过那样是不对的。众所周知,现在我们把 “十二 ”写作 12。 而在罗马数字中, “十二 ”写作 XII。X表示 10,I表示 1。II则表示两个并排的 1,即 2。也就是说, XII是由 X和 II组成的。 如同 “十二 ”可以写作 12和 XII,数字有着各种各样的计数法。 12是阿拉伯数字的计数法,而 XII是罗马数字的计数法。无论采用哪种计数法,所表达的 “数字本身 ”并无二致。下面我们就来介绍几种计数法。 10进制计数法 下面介绍 10进制计数法。 什么是 10进制计数法 我们平时使用的是 10进制计数法。 使用的数字有0、1、2、3、4、5、6、7、8、9共 10种 a。 数位有一定的意义,从右往左分别表示个位、十位、百位、千位…… 以上规则在小学数学中都学到过,日常生活中也一直在用,是众所周知的常识。在此权当复习,后面我们将通过实例来了解一下 10进制计数法。 分解 2503 首先,我们以 2503这个数为例。 2503表示的是由 2、5、0、3这 4个数字组成的一个称作 2503的数。 这样并排的数字,因数位不同而意义相异。 2表示“1000的个数”。 5表示“100的个数”。 0表示“10的个数”。 3表示“1的个数”。 a 这里的 “种”指的是数字的种类,用来说明 10进制和 2进制中数字复杂程度的差异。如 2561中包含四种数字,而 1010中只包含两种数字。 ——译者注 综上所述, 2503这个数是 2个 1000、5个 100、0个 10和 3个 1累加的结果。用数字和语言来冗长地说明有些无趣,下面就用图示来表现。 2×1000 + 5×100 + 0×10 + 3×1 如图,将数字的字体大小加以区别,各个数位上的数字 2、5、0、3的意义便显而易见了。 1000是 10×10×10,即 10(310的 3次方), (10的 2次方) 100是 10×10,即 102。因此,也可以写成如下形式(请注意箭头所示部分)。 2×103 + 5×102 + 0×10 + 3×1 再则, 10是 101(10的 1次方),1是 100(10的 0次方 ),所以还可以写成如下形式。 2×103 + 5×102 + 0×101 + 3×100 千位、百位、十位、个位,分别可称作 103的位、 102的位、 101的位、 100的位。 10进制计数法的数位全都是 10n的形式。这个 10称作 10进制计数法的基数或底。基数 10右上角的数字 ——指数,是 3、2、1、0这样有规律地顺次排列的,这点请记住。 3210 2×103 + 5×102 + 0×101 + 3×100 2进制计数法 下面讲解 2进制计数法。 什么是 2进制计数法 计算机在处理数据时使用的是 2进制计数法。从 10进制计数法类推,便可很快掌握它的规则。 ••使用的数字只有0、1,共 2种。 ••从右往左分别表示 1位、2位、4位、8位…… 用 2进制计数法来数数,首先是 0,然后是 1,接下去 ……不是 2,而是在 1上面进位变成 10,继而是 11,100,101…… 表 1-1展示了 0到 99的数的 10进制计数法和 2进制计数法。 0到 99的数的 10进制计数法和 2进制计数法 分解 1100 在此,我们以 2进制表示的 1100(2进制数的 1100)为例来探其究竟。 和 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,表示如下意思。 3210 1×23 + 1×22 + 0×21 + 0×20 如此计算就能将 2进制计数法的 1100转换为 10进制计数法。 3 1×22+0×21+0×20 1×2 + 1×8+1×4+0×2+0×1 8+4+0+0 12 由此可以得出, 2进制的 1100若用 10进制计数法来表示,则为 12。 基数转换 接下来我们试着将 10进制的 12转换为 2进制。这需要将 12反复地除以 2(12除以 2,商为 6;6再除以 2,商为 3;3再除以 2……),并观察余数为 “1”还是 “0”。余数为 0则表示 “除完了 ”。随后再将每步所得的余数的列( 1和 0的列)逆向排列,由此就得到 2进制表示了。 用2进制表示12 同样地,我们试将 10进制的 2503转换为 2进制计数法。 我们从图 1-2可以知道 2503用 2进制表示为 100111000111。各个数位的权重如下: 1×211+0×210+0×29+1×28+1×27+1×26+0×25+0×24 +0×23+1×22+1×21+1×20 在 10进制中,基数为 10,各个数位是以 10n的形式表现的。而 2进制中,基数为 2,各个数位是以 2n的形式表现的。从 10进制计数法转换为 2进制计数法,称作 10进制至 2进制的基数转换。 计算机中为什么采用 2进制计数法 计算机中一般采用 2进制计数法,我们来思考一下原因。计算机在表示数的时候,会使用以下两种状态。 开关切断状态 开关连通状态 虽说是开关,但实际上并不需要机械部件,你可以想象成是由电路形成的 “电子开关”。总之,它能够形成两种状态。这两种状态,分别对应 0和 1这两个数字。 … 0 … 1 1个开关可以用 0或 1来表示,如果有许多开关,就可以表示为许多个 0或 1。你可以 想象这里排列着许多开关,各个开关分别表示 2进制中的各个数位。这样一来,只要增加 开关的个数,不管是多大的数字都能表示出来。 当然,做成能够表示 0~ 9这 10种状态的开关,进而让计算机采用 10进制计数法, 这在理论上也是可能的。但是,与 0和 1的开关相比,必定有更为复杂的结构。另外,请比较一下图 1-3和图 1-4所示的加法表。 2进制的表比 10进制的表简单得多吧。 若要做成 1位加法的电路,采用 2进制要比 10进制更为简便。 不过,比起 10进制, 2进制的位数会增加许多,这是它的缺点。例如,在 10进制中 2503只有 4位,而在 2进制中要表达同样的数则需要 100111000111共 12位数字。这点从 表 1-2中也显而易见。 人们觉得 10进制比 2进制更容易处理,是因为 10进制计数法的位数少,计算起来不 容易发生错误。此外,比起 2进制,采用 10进制能够简单地通过直觉判断出数值的大小。 人的两手加起来共有 10个指头,这也是 10进制更容易理解的原因之一。 10进制的加法表 2进制的加法表 不过,因为计算机的计算速度非常快,位数再多也没有关系。而且计算机不会像人类那样发生计算错误,不需要靠直觉把握数字的大小。对于计算机来说,处理的数字种类少、计算规则简单就最好不过了。 让我们来总结一下。 10进制计数法中,位数少,但是数字的种类多。 →对人类来说,这种比较易用。 2进制计数法中,数字的种类少,但是位数多。 →对计算机来说,这种比较易用。 鉴于上述原因,计算机采用了 2进制计数法。 人类使用 10进制计数法,而计算机使用 2进制计数法,因此计算机在执行人类发出的任务时,会进行 10进制和 2进制间的转换。计算机先将 10进制转换为 2进制,用 2进制进行计算,再将所得的 2进制计算结果转换为 10进制。 人类使用计算机进行计算的情形 转换为2进制 转换为10进制 10101+10011 使用2进制进行计算 101000 按位计数法 下面来介绍按位计数法。 什么是按位计数法 我们学习了 10进制和 2进制两种计数法,这些方法一般称作按位计数法。除了 10进制和 2进制以外,还有许多种类的按位计数法。在编程中,也常常使用 8进制和 16进制计数法。 ●8进制计数法 8进制计数法的特征如下: 使用的数字有0、1、2、3、4、5、6、7共 8种。 80的位、81的位、82的位、83的位……(基数是8) 21+19 40 ●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种。 N 0的位、N 1的位、N 2的位、N 3的位……(基数是 N) 例如, N进制计数法中, 4位数 a3a2a1a0为 a3× N3+ a2× N2+ a1× N1+ a0× N0(a3、a2、a1、a0是0~N-1中的数字。) 不使用按位计数法的罗马数字 按位计数法在生活中最为常见,因此人们往往认为这种方法是理所当然的。实际上, 在我们身边也有不使用按位计数法的例子。例如,罗马计数法。罗马数字至今还常常出现在钟表表盘上。 使用罗马数字的钟表表盘 还有,在电影最后放映的演职员名单中,也会出现表示年号的 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=(M)+(CM)+(XC)+(V)+(III) =(1000)+(1000-100)+(1000-10)+(5)+(3) = 1998 可以发现, MCMXCVIII表示的就是 1998。罗马数字真是费劲啊! 指数法则 10的 0次方是什么 在 10进制的说明中,我们讲过 “1是 100(10的 0次方) ”,即 100=1。 也许有些读者会产生以下疑问吧。 102是“2个 10相乘 ”,那么 100不就是 “0个 10相乘 ”吗?这样的话,不应该是 1,而是 0吧? 这个问题的核心在哪里呢?我们来深入思考一下。问题在于 “10n是 n个 10相乘 ”这部分。在说 “n个 10相乘 ”时,我们自然而然会把 n想作 1,2,3…。因此,在说 “0个 10相乘 ”时,却不知道应该如何正确理解它的意义。 那么,暂且抛却 “n个 10相乘 ”这样的定义方式吧。我们从目前掌握的知识来类推,看看如何定义 10 0比较妥当。 众所周知, 103是 1000,102是 100,101是 10。 将这些等式放在一起,寻找它们的规律。 103 =1000 102 =100 101 =10 100 =? 1ͷܲ10 1ͷܲ10 1ͷܲ10 每当 10右上角的数字(指数)减 1,数就变为原先的 10分之 1。因此, 100就是 1。综上所述,在定义 10n(n包括 0)的值时可以遵循以下规则: 指数每减1,数字就变为原来的 10分之1。 10-1是什么 不要将思维止步于 100之处。对于 10-1(10的 -1次方),让我们同样套用这一规则(指数每减 1,数字就变为原来的 10分之 1)。 100 ˙ 1 1 10_1˙ 10 110_2˙ 100 110_3˙ 1000 … 1ͷܲ10 1ͷܲ10 1ͷܲ10 规则的扩展 首先让我们做一个小结。我们学习了 10n计数法的相关内容。起初,我们把 n为 1,2,3…时,即 101,102,103 …想作 “1个 10相乘 ”、“2个 10相 乘”、“3个 10相乘 ”……然后,我们抛却了 “n个 10相乘 ”的思维,寻找到了一个扩展规则:对于 10n,n每减 1,就变成原来的 10分之 1。 当 n为 0时,若套用 “10n为 n个 10相乘 ”的规则,着实比较费解。于是我们转而求助于 “n每减 1,就变成原来的 10分之 1”的规则 ”,定义出 100是 1(因为 101的 10分之 1就是 1)。 同样地, 10-1,10-2,10-3 …的值(即 n为 -1,-2,-3…时),也适用于这个扩展规则。 如此,对于所有的整数 n(…,-3,-2,-1,0,1,2,3,…),都能定义 10n的值。对于 10-3来说, “-3个 10相乘 ”的思维并不直观。但倘若套用扩展规则,即使 n是负数,也能 “定义出 ”10的 n次方的值。 对20进行思考 让我们用思考 100的方法,也思考一下 20的值吧。 25˙ 32 24 ˙ 16 23 ˙ 8 22 ˙ 4 21 ˙ 2 20 ˙˛ 由此可知,对于 2n来说, n每减 1,数值就变成原来的 2分之 1。 21的 2分之 1是 20,那么 20=1。在这里我想强调的是,不要将 20的值作为一种知识去记忆,我们更需要考虑的是,如 何对 20进行适当的定义,以期让规则变得更简单。这不是记忆力的问题,而是想象力的问题。请记住这种思维方式:以简化规则为目标去定义值。 1ͷܲ2 1ͷܲ2 1ͷܲ2 1ͷܲ2 1ͷܲ2 2-1是什么 让我们参照 10-1的规则来思考 2-1。20除以 2,得到的是 2-1,即 2-1=12。 “2的 -1次方 ”在直觉上较难理解。鉴于规则的简单化和一致性, 2的 -1次方可以定 义为 2-1=21。同理, 2-2=212,2-3=213。 综上所述,可以总结出如下等式: 10+5 = 1×10×10×10×10×10 10+4 = 1×10×10×10×10 10+3 = 1×10×10×10 10+2 = 1×10×10 10+1 = 1×10 100 = 1 10-1 = 1÷10 10-2 = 1÷10÷10 10-3 = 1÷10÷10÷10 10-4 = 1÷10÷10÷10÷10 10-5 = 1÷10÷10÷10÷10÷10 2+5 = 1×2×2×2×2×2 2+4 = 1×2×2×2×2 2+3 = 1×2×2×2 2+2 = 1×2×2 2+1 = 1×2 20 = 1 2-1 = 1÷2 2-2 = 1÷2÷2 2-3 = 1÷2÷2÷2 2-4 = 1÷2÷2÷2÷2 2-5 = 1÷2÷2÷2÷2÷2 看了上面的等式之后,你应该就更能体会 100和 20为什么都等于 1了吧。 到这里,我们给之前所说的 “规则 ”取名为 “指数法则”。指数法则的表达式为 =Na+b Na×Nb 即“N的 a次方乘以 N的 b次方,等于 N的 a+b次方 ”法则(但 N ≠ 0)。有关指数 法则的内容,在第 7章也会谈到。