1、1菜鸟学编程五袋老丐著2一一一 计算机的基本工作原理(初)一种有着神奇的“魔力”和“智能”的人造设备,正在迅速地、 彻底地、默默无闻或者令人震惊地改变和丰富我们所生活的大千世界。 这个看起来很不起眼的 ,在一些 场合被称为“电脑”的电器设备,是如何具有如此神奇的 “魔力”和“智能”的?本章将 带你开始解开这个谜。11 节介绍理想厨房系统,1.2 节通过一个炒菜实例讲解理想厨 房各部件是如何密切配合工作的。1.3 是一张理想厨房系 统与计算机系统的对照表 1.4 到 1.8 介绍了二进制、 计算机、机器指令和指令集、数和码。1.09 对计算机的重要特点进行了概 括性的总结、1.11 是计算机与理
2、想厨房的一些重要区别。其中 1.2、1.3、1.4、1.9 和 1.11 是本章重点。电子数字计算机从发明到现在,不过大约 70 年的时间。然而计算机的发明、改进和普及,却彻底地变革了人类社会。计算机本身也变得越来越复杂、快速、小巧、种类繁多。但大多数计算机都遵循冯.诺伊曼体系结构。这为我们理解大多数计算机的基本工作原理提供了方便。本章是全书的重要基础。通过本章,为你真正揭开计算机究竟如何工作的神秘面纱。(但是要直到12.4、12.5 节,才能彻底揭开计算机硬件如何在操作系统这个系统软件的调度管理下,并行运行多道程序的内在奥秘。 )纠正你对计算机可能存在的一些错误认识和看法。并且为第 2、12
3、、13 章的学习打下牢固的知识基础。本章不需要任何的预备知识,只要你能把本章认真仔细地学习两遍,你就能够真正懂得看似极为神秘莫测、奥妙无穷,到目前为止人类有史以来最伟大、最神奇而又最为复杂的发明计算机(又称为“电脑” 。这个伟大发明,汇集了几代人中很多杰出人士的聪明才智和研究成果)是如何工作的基本原理。为达此目的,笔者付出了极大的努力,找到了一种比较好的比喻方法理想厨房系统,由此开始我们的真正理解计算机工作原理的,激动人心的探索旅程。1.1 理想厨房系统:理想厨房系统,是一个通过顺序执行菜谱中的各个加工步骤,把原材料加工成菜肴的系统。它由硬件(理想厨房、自动冰箱和三条传送带)和软件(菜谱)组成
4、。1) 硬件部分:理想厨房系统,主要由以下 三个硬件部件(即实物部件)构成理想厨房、自动冰箱和三条传送带。自动冰箱:由非常多的大小一样的格子组成,每个格子都有一个唯一的编号,这个编号是从 0 开始逐1 递增的。自动冰箱负责临时保存菜谱、原材料和菜肴。是不是很奇怪?菜谱竟然要和原材料一道,统一存放在冰箱中!三条传送带:负责理想厨房与自动冰箱之间的通信及物品(菜谱中的加工步骤、原料和菜肴)传送。理想厨房:负责根据从菜谱中取到的加工步骤,进行炒菜以及进行相关的控制工作。2) 软件部分:菜谱是理想厨房系统中一个无重量、无体积、不会损坏、可经常更换的,但又极为重要的软件部件(即信息流部件) 。菜谱由一个
5、一个的加工步骤顺序组成。3注意:术语“理想厨房系统”与“理想厨房”是有区别的,理想厨房只是理想厨房系统中的一个组成部分。理想厨房系统的构成简图如图 1.1 所示:理想厨房 自动冰箱 碟名 碟中物品 格子编号 格子(存放加工步骤或原料)R0R1 厨具R2 厨师PC 厨房管理员IR 材料传送带地址传送带控制传送带01234567图 1.1 理想厨房系统的构成简图(但图中没有放入软件)理想厨房中各种碟子的作用R0、R1、R2 碟是一些通用临时存放碟,用来临时存放从冰箱中取来的原材料或经过加工了的半成品或成品。PC 碟:存放一个大于或等于 0的整数值,这个值表示:下一个要执 行的加工步骤,位于自动冰箱
6、的哪一格中。IR 碟:用来存放从冰箱中刚取过来的一个(立刻要执行的)加工步骤。 理想厨房执行菜谱中的加工步骤,其流程完全是周期性的。 厨房管理员首先要根据PC 碟中的值,通过三套传送带的协调 工作,到自动冰箱的指定格中去取菜谱中的一个加工步骤。取到理想厨房并把它放到 IR 碟中后,PC 碟中的值将会加上1(这是为取下一个加工步骤做好准备) 。然后,厨房管理员阅读并分析IR 碟中刚取到的加工步骤。根据此加工步骤的指示,去做以下七类工作中的一种: 1通过三套传送带,命令自动冰箱把指定地址格子中的(炒菜加工步骤马上要用到的)原材料(通过材料传送带)传送到理想厨房中来即取物品;2命令厨师按照指令(即加
7、工步骤)的要求,对原材料作一个基本加工操作(做“炒” , “蒸” , “煮”等基本操作步骤中的一个炒菜动作)即加工原材料。 3通过向三套传送带向自动冰箱发命令,把某个碟子中的成品(或半成品)送回到冰箱指定的格子中存放即存物品; 4在厨房的各个碟子或炊具之间传送原料或半成品在厨房内部进行物品传送 ;5根据某个状态碟中的具体条件(比如:加工步骤的预定时间到了、温度够了) ,不按正常顺序取出并且执行下一条指令,而是根据此指令中给出的(冰箱格子的相对或绝对)地址,跳转到那一格中去取下一条指令即进行(有条件的)跳转。6命令配菜员为某菜配原材料;即输入(在本章不讨论,见第 12 章) 。7命令传菜生端菜给
8、顾客;即输出(在本章不讨论) 。4一个加工步骤执行完后,理想厨房立即自动进行下一个完全类似的、新的 取加工步骤 执行加工步 骤 的周期。注意:为了解说简洁起见,在以下叙述中,我们经常把一个加工步骤称为一条指令,因为一个加工步骤就是一条指导理想厨房如何工作的命令。理想厨房一次只能执行一条指令。一条指令的执行周期,可分为取指子周期和执行子周期这两个阶段。下面我们通过一个实例来讲述理想厨房系统的工作机制。这是本章的一个重点,因为计算机的工作原理,与之极其相似。1.2 理想厨房系统的一个炒菜实例(此节最好看光盘中的视频)121现在,我们通过炒制一道香菇炒菜心的例子来说明理想厨房系统的工作过程。 首先,
9、把香菇放在冰箱地址为5 的格子中,把菜心放在冰箱地址为6 的格子中,冰箱地址为7 号的格子,预留给炒好的菜使用。首先,把香菇放在冰箱地址为5 的格子中,把菜心放在冰箱地址为6 的格子中,冰箱地址为7 号的格子,预留给炒好的菜使用。 菜谱的所有加工步骤(又称为指令)从冰箱地址0 号格开始依次按照顺序存放,编写香菇炒菜心的菜谱如下:地址 0 的格 子中: 取地址 5(中的物品)到 R0 碟;地址 1 的格 子中: 取地址 6(中的物品)到 R1 碟;地址 2 的格 子中: 将 R0 碟和 R1 碟倒入 炒锅中炒好 倒回 R0 碟 ;地址 3 的格 子中: 送 R0 碟(中的物品)到地址 7 中 ;
10、 可见,一共有 4 个加工步骤。开始时理想厨房系统状态如下图 1.3(注意:冰箱格子以及理想厨房碟子中存放的物品都用了斜体字)理想厨房 自动冰箱 碟名 碟中物品 地址 冰箱格子中物品R0R1 厨具R2 厨师PC 0 厨房管理员IR 材料传送带地址传送带0控制传送带取01234567取地址 5 到 R0 碟取地址 6 到 R1 碟;将 R0 和 R1 炒好倒入 R2 碟;送 R2 碟到 地址 7 中;香菇菜心 图 1.35菜谱设置完毕后,理想厨房系统开始自动化的工作。1) ,厨房管理员根据 PC 碟子中的数字“0” ,知道要到冰 箱地址为 0的格子中取第一条指令(即加工步骤) 。于是,厨房管理员
11、向控制传送带上送出一个“取”信号,然后马上将PC碟中的数字“0”复制后放到地址传送带上。这两个信号都会到达自动冰箱。自动冰箱收到这两个信号后,将 0 号格的内容复印件“ 取地址 5 到 R0 碟 ”放到材料传送带上,送往理想厨房。理想厨房收到后,将这条指令放到 IR 碟中。然后,厨房管理员将 PC 碟中的原来值增加 1,以便为取下一条指令做好准备。取指令周期完成后,理想厨房系统处于如下图 1.4状态: 理想厨房 自动冰箱 碟名 碟中物品 地址 冰箱格子中物品R0R1 厨具R2 厨师PC 1 厨房管理员IR 取地址 5 到 R0 碟材料传送带地址传送带控制传送带01234567取地址 5 到 R
12、0 碟取地址 6 到 R1 碟;将 R0 和 R1 炒好倒入 R2 碟;送 R2 碟到 地址 7 中;香菇菜心 图 1.4 厨房管理员读到指令存放碟(即 IR 碟)中的加工步骤后,知道要到冰箱地址号为5 的格子中去取原材料,并且取来后要放到 R0碟中。因此,管理员向控制传送带上送出一个“取”信号,然后马上将5 这个数放到地址传送带上。冰箱收到“取”信号后,知道理想厨房要取物品。然后,冰箱从地址传送带得到了 5,于是冰箱将地址为 5 的格子中的物品“ 香菇 ”取出来,放到材料传送带上。 材料传送带上的物品“ 香菇 ”,传到理想厨房后,按照指令的要求(通过厨房内部的传送带)送到了 R0碟中。第一条
13、指令 执行完后,理想厨房系 统处于如下图 1.5 所示的状态:理想厨房 自动冰箱 碟名 碟中物品 地址 冰箱格子中物品R0 香菇R1 厨具R2 厨师PC 1 厨房管理员IR 取地址 5 到 R0 碟材料传送带地址传送带5控制传送带取01234567取地址 5 到 R0 碟取地址 6 到 R1 碟;将 R0 和 R1 炒好倒入 R2 碟;送 R2 碟到 地址 7 中;香菇菜心图 1.52)接下来,开始执行下一条指令的取指周期,类似于前一条指令,在取指周期完成后,理想厨房系统处于如下图 1.6 状态:理想厨房 自动冰箱 碟名 碟中物品 地址 冰箱格子中物品6R0 香菇R1 厨具R2 厨师PC 2
14、厨房管理员IR 取地址 6 到 R1 碟;材料传送带地址传送带1控制传送带取01234567取地址 5 到 R0 碟取地址 6 到 R1 碟;将 R0 和 R1 炒好倒入 R2 碟;送 R2 碟到 地址 7 中;香菇菜心图 1.6管理员分析指令存放碟中的加工步骤(指令)后,知道要到冰箱地址为 6的格子中去取原材料,并且放到 R1 碟中。因此,管理员向控 制传送带上发一个“取”信号,然后马上将6 这个数放到地址传送带上。冰箱收到“取”信号后,知道理想厨房要取东西,然后,冰箱从地址传送带得到了 6,于是冰箱将地址为 6 的格子中的物品“ 菜心 ”取出,放到材料传送带上。 材料传送带上的物品“ 菜心
15、 ”,传到理想厨房后,按照指令的要求通过厨房内部的传送带被自动送到 R1 碟中。第二条指令 执行完后理想厨房系统处于如下图1.7 状态: 理想厨房 自动冰箱碟名 碟中物品 地址 冰箱格子中物品R0 香菇R1 菜心 厨具R2 厨师PC 2 厨房管理员IR 取地址 6 到 R1 碟;材料传送带地址传送带6控制传送带取01234567取地址 5 到 R0 碟取地址 6 到 R1 碟;将 R0 和 R1 炒好倒入 R2 碟;送 R2 碟到 地址 7 中;香菇菜心图 1.73)在第 3 条指令的取指周期完成后,理想厨房系统处于如下图 1.8 状态:理想厨房 自动冰箱碟名 碟中物品 地址 冰箱格子中物品R
16、0 香菇R1 菜心 厨具R2 厨师PC 3 厨房管理员IR 将 R0和 R1 炒好 倒入 R2 碟 ;材料传送带地址传送带2控制传送带01234567取地址 5 到 R0 碟取地址 6 到 R1 碟;将 R0 和 R1 炒好倒入 R2 碟;送 R2 碟到 地址 7 中;香菇菜心图 1.87厨房管理员看到 IR 碟中的内容后,命令厨师将R0 碟和 R1 碟中的原材料倒入锅中炒好后,倒入 R2 碟中。完成后如图 1.9理想厨房 自动冰箱碟名 碟中物品 地址 冰箱格子中物品R0 香菇R1 菜心 厨具R2 香菇菜 心 厨师PC 3 厨房管理员IR 将 R0和 R1 炒好 倒入 R2 碟 ;材料传送带地
17、址传送带控制传送带01234567取地址 5 到 R0 碟取地址 6 到 R1 碟;将 R0 和 R1 炒好倒入 R2 碟;送 R2 碟到 地址 7 中;香菇菜心图 1.94)第 4 条指令在取指令周期完成后,理想厨房系统,处于如下图1.10 状态:理想厨房 自动冰箱碟名 碟中物品 地址 冰箱格子中物品R0 香菇R1 菜心 厨具R2 香菇菜 心 厨师PC 4 厨房管理员IR 送 R2碟到地址 7中;材料传送带地址传送带控制传送带01234567取地址 5 到 R0 碟取地址 6 到 R1 碟;将 R0 和 R1 炒好倒入 R2 碟;送 R2 碟到 地址 7 中;香菇菜心图 1.10下面开始执行
18、“ 送 R2 碟到 地址 7 中 ”这条指令。厨房管理员分析指令存放碟中的加工步骤后,知道要将 R2 碟中的物 品,送到冰箱地址为 7 的格子中去存放。于是,管理员向控制传送带上发一个“存”信号,然后马上将7 这个数放到地址传送带上,最后将 R2碟中的物品“香菇菜心”放到材料传送带上,送往冰箱。 冰箱收到“存”信号后,知道理想厨房要存放物品,然后,冰箱从地址传送带得到了7,于是自动冰箱(的机械手)在材料传送带旁,等待从理想厨房 R2 碟传来物品“ 香菇菜心 ”,一旦到达,自动冰箱就将其取下,并将其存放到地址号为7 的格子中。完成后系统状态如图 1.11:理想厨房 自动冰箱碟名 碟中物品 地址
19、冰箱格子中物品8R0 香菇R1 菜心 厨具R2 香菇菜 心 厨师PC 4 厨房管理员IR 送 R2碟到地址 7中;材料传送带地址传送带控制传送带01234567取地址 5 中 到 R0 碟取地址 6 中 到 R1 碟;将 R0 和 R1 炒好倒入 R2 碟;送 R2 碟到 地址 7 中;香菇菜心香菇菜心 图 1.11至此,香菇菜心这道菜终于大功告成了。122 现在,我们通过一些问答,对已经学到的重点知识作一个概括和讨论:问题 1.理想厨房将要执行的炒某道菜的所有指令是以何种形式,存放在何处的?答:理想厨房将要执行的加工某道菜的全部指令(即加工步骤) ,必须按照加工的先后顺序,由小地址号到大地址
20、号连续地存放在自动冰箱的多个格子中。也就是说:如果正在执行的指令,所在的地址是 n 的话;下一条要执行的指令,一定是在地址为 n1 的冰箱的格子中除非刚刚执行的是一条跳转指令。 问题 2.理想厨房如何才能从自动冰箱取到一条指令?取到指令后存放到何处?答:为了取一条指令,厨房管理员首先要把 PC 碟中的数 据(假设是 8)复制后放到地址传送带上,送往自动冰箱;与此同时,要在控制传送带上发送一个“取”信号,送往自动冰箱;然后,厨房管理员还要把 PC碟中的数据加上 1(PC 碟中的数据现在变成了 9,以便为取下一条指令作准备) 。 自动冰箱根据从控制传送带上得到的“取”信号,知道理想厨房要取东西;根
21、据从地址传送带上得到的地址信号:8。自动冰箱由此知道理想厨房要取第8 格中的物品。于是自动冰箱将第 8 格的物品取出,放到材料传送带上。厨房管理员收到自动冰箱从材料传送带上传来的第 8 格中指令后,把它放在 IR 碟中。由以上过程可知,哪怕是要完成取一条指令这样的一件微不足道的小事,对于理想厨房系统来说也是非常麻烦的。厨房管理员、PC 碟、地址传送带 、控制传送带、自动冰箱、材料传送带、IR 碟,缺一不可,而且相互之间要密切配合、协调工作才能完成此事。厨房管理员在其中起着核心控制作用。 与取指令类似,理想厨房在执行一条指令时,经常也是如此的麻烦和白痴(比如从冰箱取原材料的指令或送菜肴到冰箱的指
22、令) 。问题 3.如果没有保存在冰箱中的菜谱,理想厨房的厨师是否能够炒出一道菜来?答:决对不会!厨师只会在厨房管理员的命令下,每次仅仅做 “炒” 、 “煎” 、 “蒸” 、 “烤”、 “炸”和“煮”等一些固定数量的基本操作中的一个基本操作。在这个厨师的大脑中,没有任何一道菜的全部加工过程。他也学不会新的基本炒菜动作。他只会一次次地、忠实地、快速地按照厨房管理员的命令,每次只做一个单一步骤的加工操作。而厨房管理员向厨师发出的加工命令,也都是来自于他所取到的菜谱中的指令。没有保存在冰箱中的菜谱,理想厨房系统中的管理员和厨师根本加工不出任何一道菜肴来。9理想厨房系统的炒菜“智能”来自于菜谱的编写者。
23、正是由于人们编出来的可以让理想厨房执行的各种各样的菜谱,才使得原本白痴般的、能力极为有限的理想厨房系统在炒菜方面显得几乎无所不能!问题 4 编写特殊菜谱很困难吗?答:确实很难编写。要想理想厨房系统做出任何一道菜肴,都要编写出它能自动执行的特殊菜谱,这种菜谱要非常精确、无二义性。在这种菜谱中,要用冰箱地址号来取代原料的名称(这导致了菜谱很难看懂) 。还要知道,厨师究竟会做哪几种基本炒菜动作、厨房管理员懂得哪几种加工命令。此外,原料所放的位置不同,菜谱的内容也就有所不同,与给普通人看的菜谱有很大不同。问题 5 你能简要叙述一下,厨房管理员的工作步骤吗?答:厨房管理员的工作完全是周期性的,即他永远在
24、做:取指令 分析指令 发出控制命 令要求各部 件执行指令这一种周期性的动作。只要一启动,理想厨房系统永远在按照这个周期性的动作,一条一条的顺序的取指令并执行指令(如果遇到跳转指令,则跳转到指定地址去,继续取下一条指令) ,不停地快速运行着,直到停机或发生严重故障为止。理想厨房系统的工作原理,到此已经全部介绍完毕。学完理想厨房系统的基本工作原理后,从整体上把握计算机的基本工作原理,就变成为一个比较轻松的名词替换的小游戏了。1.3 理想厨房系统与计算机系统术语对照表理想厨房的工作原理,与计算机的工作原理是极为类似的。下面首先给出两个系统之间的术语对照表,见表 1.1。表 1.1 术语对照表理想厨房
25、系统 电子数字计算机(简称计算机) 1.硬件设备自动冰箱(包含多个大小相等的格子) 内存(又称为主存,包含很多大小相等的基本存储单元) (冰箱中的)一个格子 (内存中的)一个基本存储单元材料传送带 数据总线地址传送带 地址总线控制信号传送带 控制总线理想厨房(包含以下设备) CPU(或称微处 理器,包含以下部 件)厨师及炒菜设备 算术逻辑单元 ALU(又称为运算 器)厨房管理员 控制单元(又称为控制器)通用临时存放碟 通用寄存器指令地址存放碟 PC 指令地址寄存器(又称为程序计数器 PC)10指令存放碟IR 指令寄存器(又称为 IR寄存器) 状态存放碟 状态寄存器专用加工容器 专用寄存器采购员
26、及配菜员 输入设备(键盘、鼠标、网卡、U 盘等)传菜生 输出设备(显示器、打印机、网卡、U 盘等)自动仓库 外存(硬盘、U 盘,但同时也属 于输入输出设备) 2.软硬件之间的接口(编写菜谱或程序的基本要素)冰箱格子的地址(即编号) 内存中基本存储单元的地址(即编号)厨师可做的各种炒菜的基本动作(蒸、炒、炸、煮等)运算器可进行的各种基本运算(算术运算、逻辑运算等)碟子的名称 寄存器的编码或代号 理想厨房可以执行的所有各种加工动作(指令)该类型计算机的指令集3.软件特殊菜谱 (机器语言形式的) 程序加工步骤 (机器)指令原材料 数据 炒好的菜 信息(或称为结果)精确的普通菜谱 高级语言程序(又称为
27、源程序或源代码) 简要的普通菜谱 伪代码4. 系统的使用者编写特殊菜谱者 用机器语言编程的程序员 编写精确的普通菜谱者 用高级程序设计语言编程的程序员理想厨房系统的大堂经理和顾客 计算机的用户在计算机上运行一个程序时,上表中列出的计算机的各个部件会协同工作,完成任务(参见 1.6 节) 。如果没有对理想厨房工作原理的详细讲解,由于出现了太多新的专业术语和名词,人们决对很难在短时间内,全面把握和理解这个计算机系统的工作原理的(对于任何一个初学者,这都是一件极其困难的事) 。1.4 预备知识:二进制及相关知识简介:人类有十个手指,所以偏爱十进制记数法。可是,在人造数据处理设备中,使用十进制记数法通
28、常却是愚蠢的选择。虽然理论上可以使用任何进制(比如十进制)为基础来制造计算机,但现代计算机都是采用二进制的数字电子信号(制造电子计算机为何采用数字信号而不用模拟信号,不用其他进制而采用二进制,请参见本书附录 D )进行工作的 机器。也就是说,在现代计算机的内部,只能以二进制的形式来存储、传输需要执行的指令和需要加工的数据。为了从底层彻底把握计算机的基本工作原理,读者必须事先对二进制的相关知识要有11所了解。以下进行简要介绍,更深入一些的讨论请参见大学计算机基础或微机原理等书籍。1.4.1 二进制数的概念及其数制之间的转换首先,来看一张部分十进制数与二进制数的数值对照表:十进制数 所对应的二进制
29、数 (所对应的十六进制数)0 0 01 1 12 10 23 11 34 100 45 101 56 110 67 111 78 1000 89 1001 910 1010 A11 1011 B12 1100 C13 1101 D14 1110 E15 1111 F16 10000 10表 1.2 部分十进制数与二进制数(和十六进制数)的数值对照表一般情况下,用 n 位二进制可表示的最大正整数值是 2n-1。比如:4 位二进制可表示的最大正整数是2 4-1=15(即 1111) 2 。可见,二进制只能用两个数字“0”和“1”来进行计数。二进制加法运算的重要规则是: 1+1=10 ,即两个 1
30、相加产生向高位的进位。左边是高位 数,右边是低位数(此外,其它加法规则还有:1+0=1、0+1=0、0+0=0) 。我们经常用一对圆括号括住一个数值,并在圆括号外面加一个数字下标,来表示一个数是几进制数。比如(1011) 10 是一个 十进制数;而(1011) 2 是一个二 进制数。142 将二进制整数转化成十进制整数一个十进制的整数,其数值可用以下展开式来表示:比如 3785(3785) 10=3103+7102+8101+5100 (1)我们把(1)式中 10 的几次方称为权重,权重左边的乘数称为系数。 (1)式中共有 4个系数,从左到右依次是:“3” “7”“8”“5”。可见,在表示数值
31、数据时,越左边的系数权重越大。权重中的基数(即底数)与该进制是一样大的,在这里都是10。类似的,一个二进制数,其数值也可用以下展开式来表示:比如二进制数 1011(1011) 2= 123+022+121 +120 (2)12此二进制数的值,等于十进制的 18+04+12+11=8+2+1=(11) 10 (3) 由此可以得到:二进制整数转化成十进制整数的一般方法:只要将该二进制整数(即 1011)展开后的(2)式中的每一位(小于 2)的系数值,乘以这一位的转化成十进制数后的权重(即 2 的几次方) ,然后再将逐个乘积项的数值(用十进制加法规则)相加起来即可。深入一步:以上这种二进制整数转化成
32、十进制整数的方法,其 实适合将 一个任意 R进制数转变成十进制数。比如有 8 进制数(305 )8,就可展开 为: (305)8=382+081+580 = 364+08+51=(197)10143 将十进制整数转化成二进制数:1. 将十进制数转换成二进制数的短除法:把一个整数(比如 89)从十进制转换成二进制,需要用新基数 2 除这个数(89) ,余数(1)是结果左边的下一位数字,商(44)是新的被除数,整个过程直到商为 0 时终止。短除法就是按照以上规则,把要转换的十进制整数不断的除以2 然后取余数,商作为新的被除数,直到商为 0的时候结束。然后把余数倒着写出来。例如: 把 84 转换成二
33、进制数即: (89)10= (1011001)2深入一步 :任意的 R 进制实 数表示法一般情况下,任何一个 R进制实数,都可以 紧凑地表示为:(R 通常是 2,8,10,16 中的某个数) (+ rnrn-1r1r0 . r-1r-2.r-m)R (其中的任何 一个 ri 都是 0 到 R-1 之间的一个整数)将任意一个R 进制数扩大 R 倍(即乘以 R),只需将小数 点右移一位即可;类似地,将任意一个R 进制数缩小 R 倍( 即除以 R),只需将小数 点左移一位即可。其中 R=10 是人们最为熟悉的十进制数,这种数的表示法,主要是由古代印度人 发明的。任何一个 R进制数,也都可以用多项式的
34、展开表示为:+(rnRn+ rn-1Rn-1+ r1R1+ r0R0 + r-1R-1+ r-2R-2+ r-mR-m) (ri 称为系 数,Ri 称为权重)R 进制数值的多项式展开表示法中 ,不使用小数点。1244 222 211 25 22 21 20 8900110113一个数的各种进制表示法之间的数值是一样大的,只不 过 表现形式不同而已。注意:短除法也适用于将一个十进制整数转换为一个任意 R(R2)进制的整数,只需将除数由 2 替换为R 即可(参见例题 )。可选练习:将十进制整数 89 用短除法转化为8 进制整数。*1.4.4 将十进制纯小数转化成二进制纯小数10 进制纯小数转换为2
35、 进制纯小数的转换过程,与整数的进制转换过程有些类似而又有些相反:不是用新的基数 2 除这个数,而是用新基数 2 去乘它。乘法的进位将成为答案右边的下一位数字,乘法结果中的小数部分将成为新的被乘数,整个过程直到乘法结果中的小数部分为 0 时终止。例如:把十进制小数 0.375 转换成二进制小数:0.3752 = 0.750 0 /进位 0,小数点后第一位0.752 = 1.50 1 /进位 1,小数点后第二位0.5 2 =1.0 1 /进位 1,小数点后第三位所以,(0.375) 10=(0.011)21.5 预备知识:数和码的含义和区别如果计算机仅仅只能够对一些数进行数值运算(在计算机刚发明
36、的早期年代确实是如此) ,那么它的应用范围就很窄。然而,现代计算机的应用范围却是极其广泛的。根本原因在于:现代计算机不仅能对数进行运算,还能对各种各样的“码”进行处理。所以,我们想要真正懂得计算机并且学好编程,就不仅要熟悉二进制的“数” ,还必须对二进制的“码”也有一个比较清晰的整体了解。以下这些内容虽然比较繁琐,然而理解起来却并不太困难。151 十进制的数和码:我们通过一个例子,先来来说明十进制数字系统中数与码的区别如果 3785 用于表示数,则越高位(即越左边的位)的数字越重要(因为权重越大,在十进制数3785 中, “3”的权重是 103,而“5”的权重是 100) 。 而 3785用于
37、表示非数值的码,则每一位都同样重要。码值仅相差一位,所表示的文字(或代表的事物)就可以有巨大的区别(比如:3785 可代表汉字“前” ,而 3786可代表汉字“后” ) 。 十进制的数字串“3785” ,既可以表示一个值为三千七百八十五的十进制数,也可以表示一个码为 3785 的汉字(或者表示任何别的什么10000个同类型事物中的码值为 3785的一个特定事物) 。 对于数值可以进行各种数学运算,而对于表示非数值的码进行数学运算,通常毫无意义。152 二进制的位、位串、字节 与十进制一样,二进制数与二进制码也有类似的区别。只不过在二进制中,只能用 0和1 组成的一个二进制数字串,来构成任何大小
38、的数值或者表示具有任何含义的码。我们先来熟悉一些与二进制有关的术语。位:单个二进制数字不是 0 就是1,再没有别的可能数字我们将其称为“位”(bit) 。位串及其长度:任意多个二进制“位”顺序排列在一起(比如:11011011100) ,我们称14之为位串(有的教科书称为“位模式” ) 。位串中数字的个数,我们称为位串的长度。字节8 位二进制位串在计算机、通信及其大量相关应用中,人们最为关心的是长度为 8 位的二进制位串。这是由于现代的绝大多数计算机和数字化的通信网络设备,都是以 8 位二进制位串作为计量(部件的)数据存储容量和(传输过程中的)数据传输量的一种基本单位。我们把 一个 8 位二进
39、制位串称为一个字节(Byte)。深入一步:二进制数据存储和传输中的一些常用单位“字节” (Byte)这个基本单位 虽然是“位”这个最小二进制 单位的8 倍,但在很多场合仍然显得太小,更大的常用单位有 (用 B 来表示Byte):千字节: 1KB=1024B 兆字节: 1MB=1024KB吉字节: 1GB=1024MB每种单位之间都是 1024 倍的关系,而不是 1000 倍的关系。所以,我们常常会看到一些数 据存储设备标出它的数据存 储容量是多少个 KB、MB或 GB;或者一根网线(或者一 块网卡)标出它的数据传输量是 每秒钟传输多少个 KB、MB或 GB。153 二进制的数和码如果用一个位来
40、表示整数值,只能表示 0和 1 这两个值中之一。大于 1 的整数值用一个“位”表示不了。如果用单个的“位”来表示码,则只能用来对(同属一种类型的)两种不同事物进行编码。比如:用 0 表示“假” , 用 1 表示“真” ; 用 0 表示“否” , 用 1 表示“是” ;或者用 0 表示动物“狗” ,用 1 表示动物“猫” ;等等。如果用长度为 2 的一个位串来表示整数值,则能够表示00(即 0) 、01(即 1) 、10、11这 4 个整数值中的某一个。如果用长度为 2 的位串来进行编码,由于有 4(即 22)个码值可以用,则能够用来对属于同一类型的 4 个不同的事物(或状态)进行编码。比如 酸
41、,甜,苦,辣、牛,马,羊,猪、加,减,乘,除、A,B,C,D、赵,钱,孙,李等等。深入一步:编码和解码的一个实例 通过制定编码规则,比如:可以用 00表示“D”、 01 表示“C”、 10 表示“B”、 11 表示“A” ,这就构成了一张表示 4个字符的 编码解码表(注 1),见表 1.2 。(注 1):如果把00,01,10,11看成 4 个未婚男士(的代号),A,B,C,D看成 4 个未婚女士(的代号)。所谓的“编码解码表”,只不过是所有男士与女 士之间的一张快速配对 表而已。用 严格的数学术语来讲,这实质上是两个集合00,01,10,11与 A,B,C,D 的所有元素之间的一 张一对一的
42、映射表。 表 1.2 表示 4 个字符的编码解码表有了编码解码表,先通过对字 符串“CAB”进行编码,就可以用一些码值构成的二进制位串“011110”来间接地存储和传输这个字符串。因 为这样 既安全,又方便(注 2)。二进制码 字符00 D01 C10 B11 A15到达目的地后,接收方也要有同 样的一张字符的“编码解码 表”,才能将 这种接收到的二进制位串,翻译成它的本来意 义。比如将二 进制位串 011110 翻译成字符串“CAB”。这个过程就称为解码。 编码 发送 接收 解码 CAB011110011110CAB图: 字符串的编码、发送、接收、解码全过程(注 2)一个二进制位串,用二 进
43、制的 电子数字信号是很容易表示、存储和传输的。而任何用文字表达的非数值数据,不通过 某种编码,是无法直接用二进制的电子数字信号来表示、存储和传送的。如果用一个字节来表示无符号的整数,则能够表示2 8=256 个整数值。分别是从 0到255,对应于二进制数从(00000000) 2到(11111111) 2 。如果用一个字节来进行编码,则能够用来对 256 种同类事物进行编码。计算机中一种常用的对英文文本(即文件)中常用字符的编码规则,通常是采用一个字节来对英文字符进行编码的“ASCII码表” (细节参见附录 B) 。借助于 ASCII 码表,我们就可对一个英文文本进行编码,转换成一串长长的二进
44、制 ASCII 码形式的位串后(但实质上还是一个英文文本) ,送到计算机中进行编辑、加工、保存和(通过网络)进行远程通信。在不必区分加工处理对象到底是数还是码的场合,我们可将其统称为数据。有了这些预备知识,现在我们终于可以整体而又简明地介绍计算机的工作原理了。16 电子数字计算机:电子数字计算机(以后简称为计算机)是一个通过执行程序,把数据加工成信息的电子数字设备。类似于理想厨房系统,计算机也是由硬件(中央处理单元、内存和三套总线、外围设备)和软件(程序)组成。1.6.1 计算机的硬件计算机硬件主要由以下四个实物部件构成:中央处理单元、内存、三套总线和外围设备。内存(相当于自动冰箱):内存主要
45、是由极大量的大小相同的基本存储单元(相当于自动冰箱的格子)组成。每个基本存储单元都具有一个从 0开始顺序递增的唯一编号,称为内存基本存储单元的地址(相当于冰箱格子的编号),但在很多书中(包括本书)经常将其简称为内存地址。现代计算机,大多数是以字节(而不是以更小的“位” )作为基本存储单元,来分割内存的。内存负责临时保存正在执行(和将要执行)的程序的指令序列、程序要加工的16数据和处理结果。这些内容在内存中,全部都是以二进制位串形式存放的。如下图 1.14 所示: 内存地址 内存基本存储单元中存放的位串(即字节)000000001000000000000000100000010000000010
46、00001000000000100001000000000010000101图 1.14 内存片段示意图:由具有唯一地址的大量内存基本存储单元构成的内存。在每个基本存储单元中,可以存放长度为一个字节的指令或数据。一条指令(或者一个数据)如果太长,一个基本存储单元(注)存放不下,就要用内存地址连续的几个基本存储单元来存放。(注)不少教科书把内存的一个基本存储单元称作为一个字节。n 个基本存储单元就称为 n 个字节。三套总线(相当于三条传送带):分别是数据总线、地址总线和控制总线,负责中央处理单元与内存之间的通信及数据(包括程序中的指令、数据和信息)传送。中央处理单元,简称 CPU(相当于理想厨房):负责通过三套总线,到内存中去取程序(相当于菜谱)中的指令(相当于加工步骤) ,并根据指令对数据(相当于原材料)进行运算处理(相当于加工原材料)以及进行相关的控制工作。中央处理单元中的主要部件有:控制器或称为控制单元(相当于厨房管理员) 、运算器(即 ALU,相当于厨师加炊具)和一些寄存器(相当于厨房中的碟子) 。外围设备(相当于配菜员或传菜生)包括输入设备(键盘、鼠标、网卡、数码相机、麦克风等) 、输出设备(显示器、打印机、网卡、音箱等)和外存(硬盘、U 盘、光盘等) 。包含机械部件的外围设备,其工作速度比计算机中的纯电子器件(CPU、内存、三套总线)慢