菜鸟学编程(何勤)1020.doc_第1页
菜鸟学编程(何勤)1020.doc_第2页
菜鸟学编程(何勤)1020.doc_第3页
菜鸟学编程(何勤)1020.doc_第4页
菜鸟学编程(何勤)1020.doc_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论