计算机导论(第2版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-17 10:04:42

点击下载

作者:朱战立等

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

计算机导论(第2版)

计算机导论(第2版)试读:

第2版前言

计算机导论是一门概括性地讲授计算机学科主要课程的基本内容和重要应用,并宏观地讨论这些课程相互之间内在联系的课程。该课程的开设目的是,使那些刚刚步入计算机学科及与计算机学科关系密切的其他学科的大学一年级学生,对计算机学科的理论基础、重要应用有一个基本的了解,从而帮助他们更好地完成后续课程的学习。《计算机导论》第1版出版后,受到许多高校教师和学生的关注,被许多高校选为教材使用。本教材是第2版。第2版的修改内容主要是:对第1版过时的内容进行了更新,并新增加了计算机信息安全一章。新增的“计算机信息安全”一章列为第10章,放在“计算机网络及其应用”一章的后面。增加“计算机信息安全”一章的主要原因是:①随着计算机网络的快速发展,计算机信息安全问题越来越重要;②计算机学科各专业的专业课授课计划通常不包括计算机信息安全内容,在本课程中对计算机信息安全问题做一个简要介绍非常必要。“计算机信息安全”一章的内容主要分为两部分:一部分讨论计算机信息安全的主要威胁;另一部分讨论保证计算机信息安全的主要技术。

本书可以分为5大部分,共12章。第1部分为第1章绪论,展开本书后续章节的框架。第2部分包括第2~5章,主要讨论计算机硬件的基本概念、基本组成和基本工作原理。第3部分包括第6~8章,主要讨论软件和软件开发的基本问题。第4部分由第9章和第10章组成,其中,第9章讨论计算机网络的基本概念及Internet上的重要应用,第10章讨论计算机信息安全问题。第5部分包括第11章和第12章,分别介绍Word和Excel软件的使用方法。

根据作者的教学实践,使用本书授课需48~64学时,其中包括8~14课时的上机实践。课时少的教师使用本书时,可考虑不讲授标有*号的章节,还可以快速介绍第11章和第12章中不经常使用的或较复杂的操作内容。

本书第1、2、3、4、7、8章由朱战立编写,第5章由杨谨全编写,第9章由李高和编写,第11、12章由宋新爱编写,第6章由朱战立与宋新爱共同编写,第10章由李高和与杨谨全共同编写。全书由朱战立修改定稿。

本书提供电子课件,请登录华信教育资源网(http://www.hxedu.com.cn),注册后免费下载。

尽管作者在写作过程中非常认真和努力,但由于水平有限,错误和不足之处在所难免,敬请读者批评指正。

作 者

第1章 绪论

计算机导论是一门概括性地讲授计算机学科主要课程的基本内容和重要应用,并宏观讨论这些课程相互之间内在联系的课程。本课程的开设目的,是使刚刚步入计算机学科的大学一年级学生,对计算机学科的理论基础、重要应用有一个基本的了解,从而帮助学生更好地完成后续课程的学习。

本章是对本门课程主要内容的概括性讨论。本章概述了计算机的发明和发展过程,讨论了计算机系统的基本组成及软件开发的基本问题,从而展开本书后续章节要讨论内容的基本框架。

1.1 计算机的发明

在计算机的发明过程中,许多人做出了重要贡献。然而,几乎所有研究计算机发明历史的学者基本都同意,以下三件事是计算机发明过程中最重要的事件。

1.图灵机的提出

1936年,英国剑桥大学著名数学家图灵在研究解决数学的一个基础理论问题时,发表了著名的“理想计算机”的论文。图灵在该文中提出了现代通用数字计算机的数学模型。这种理论机器被称为图灵机。图灵分析和证明了这种图灵机可达到的功能。从理论上讲,图灵机的功能和现代计算机的功能基本类似。在随后的几十年时间里,计算机科学家、数学家、电子工程师研制实际计算机时,图灵机一直是其功能方面要达到的目标。另外,图灵在分析和证明图灵机功能时所使用的形式化证明方法,也奠定了计算机科学坚实的数学基础。

2.第一台计算机的制造成功

世界上第一台通用电子数字计算机是美国宾夕法尼亚大学莫尔学院的约翰·莫克莱博士和他的研究生J·普雷斯泊·埃克特主持制造的,取名为ENIAC(即电子数字积分计数器)。ENIAC是第二次世界大战时应美国军方快速计算导弹弹道的需求研制的,但它正式完工时已是1945年年底。ENIAC主要由电子管和继电器组成,计算速度为5千次/秒,这样的计算速度比当时的其他计算工具有了很大的提高。

更重要的是,在此以前,对新的计算工具研制的主流方向是机械实现方法,ENIAC的出现,使众多科学家和工程师把自己的注意力重点转向了电子实现方法,这为现代电子计算机的问世打下了基础。

3.冯·诺依曼计算机模式的提出

冯·诺依曼出生于匈牙利,以后移居美国,成为普林斯特大学的数学教授。冯·诺依曼在数学上的成就使他在20岁时就已是世界上知名的数学家了。在J·普雷斯泊·埃克特与冯·诺依曼的一次偶然会面中,他们讨论了ENIAC的工作原理和操作中的问题。冯·诺依曼经过认真思考,提出了一个全新的电子计算机设计方案。这个方案的核心就是存储程序方法。并且,冯·诺依曼和宾夕法尼亚大学莫尔学院合作,于1952年设计完成了按照这种方案设计的取名为EDVAC(电子离散变量自动计算机)的电子计算机。

冯·诺依曼提出的存储程序方法,就是设计一个包括存储部件和处理部件的机器,程序存储在存储部件中,处理部件按照存储的程序有条不紊地执行。存储程序方法是计算机发展的一个重要里程碑。现代计算机都是采用存储程序方法来实现自动计算的。其中,程序(以及运行程序所需的数据)由0、1符号编码组成。计算机科学界把采用0、1符号编码方法和存储程序方法设计的计算机称为冯·诺依曼计算机。

现代计算机出现和广泛使用后,有许多科学家希望再发明或提出一种能够突破冯·诺依曼计算机模式的新计算机模式。可是,经过众多科学技术人员的努力,虽然在组成计算机的体系结构及软件设计的方法上取得了非常大的进步,但计算机工作的基本原理至今仍然是冯·诺依曼计算机模式。

1.2 计算机的发展

1.2.1 计算机硬件发展简史

计算机的硬件是计算机作为计算工具的物质基础。计算机硬件的发展受到电子开关器件的极大影响,因此,器件的更新成为计算机技术进步划代的标志。自第一台电子计算机发明以来,计算机的硬件组成有了飞速的发展。以构成计算机硬件的器件为标志,计算机的发展经历了电子管、晶体管、中小规模集成电路和大规模超大规模集成电路4个发展阶段。

1.电子管时代(20世纪40年代中期到50年代后期)

此时的计算机硬件器件主要由电子管组成。一个电子管的体积和成人一个指头的体积近似,而一台计算机需要许多许多的电子管,所以这时的计算机体积非常庞大。与以后的计算机相比,电子管计算机的运算速度很低,存储容量很小,功耗很高,可靠性很低。尽管如此,电子管计算机奠定了计算机的技术基础,对以后计算机的发展具有深远的影响。

2.晶体管时代(20世纪50年代后期到60年代中期)

此时的计算机硬件器件主要由晶体管组成。1954年,美国贝尔实验室制成第一台晶体管计算机。晶体管的体积较电子管的体积小很多,因此,晶体管计算机的体积较电子管计算机的体积小了很多。体积的缩小及相关技术的发展,带来了计算机运算速度的提高,存储容量的增大,功耗的降低,以及可靠性的提高。晶体管是用半导体材料制造的,半导体材料便于控制并且功耗很低,集成度的提高有很大的发展空间,因此,这一时代为未来计算机的迅速发展铺平了道路。

3.小规模、中规模集成电路时代(20世纪60年代中期到70年代初期)

集成电路是指把若干个元件集成在一个拇指大小的半导体基片上,并进行封装,具有一定功能的电子电路。开始时,集成电路的集成度比较低,称为小规模集成电路。随后,集成电路的集成度提高了很多,称为中规模集成电路。此时,计算机的运算速度进一步提高,存储容量进一步增大,功耗进一步降低,可靠性进一步提高。

4.大规模、超大规模集成电路时代(20世纪70年代初期至今)

随着集成电路的集成度迅速提高,出现了大规模和超大规模集成电路。单就集成度来说,这一时代和第3代相比,除集成度进一步提高外,没有太大的差别。但是,由于大规模、超大规模集成电路技术的发展,可以把整个处理器制造在一个拇指大小的芯片上,因此计算机的体系结构和构成方式有了很大的发展。另外,大规模、超大规模集成电路技术为微型计算机(简称微机)的出现奠定了基础,微机的出现和广泛使用,在计算机的发展历史上占有重要的地位。

1.2.2 计算机的分类

计算机的分类以计算机的性能参数为主要区分标志。早期时,通常把计算机分为大型计算机、中型计算机和小型计算机。从第4代计算机以来,计算机又向两个极端方向发展,出现了称为巨型机的超大型计算机和称为微机的超小型计算机。

一般来说,计算机性能从高到低的排列次序是:巨型计算机、大型计算机、中型计算机、小型计算机、微型计算机。但是,随着计算机技术的迅速发展,往往是几年以后推出的小型计算机的性能达到或超过了几年前中型计算机的性能,中型计算机的性能达到或超过了几年前大型计算机的性能。例如,现在任何一台微型计算机的性能都远远超过中小规模集成电路时代大型计算机的性能。

1.3 计算机系统

我们知道,计算机是目前人类发明的最神奇的工具之一。计算机不仅可以完成许许多多的工作,而且几乎可以应用在人类生产和生活的所有方面。

计算机之所以具有这样神奇和巨大的功能,这与它的组成和工作方式密切相关。完成任何任务的计算机,严格意义上的术语应该称做计算机系统。计算机系统由硬件和软件两大部分组成。若把计算机系统比做人,则硬件构成了计算机系统进行通用计算(或称任务处理)的“躯干”,软件构成了计算机系统进行通用计算的“大脑”。

当然,计算机系统的“大脑”和人的大脑有许多重要的不同点:人的大脑中的知识是后天不断学习获得的,而计算机系统的“大脑”是由人来支配的,人类可根据要完成任务的不同,为自己的计算机系统安装不同的软件;更重要的是,人的大脑是天生的,而计算机系统的“大脑”(软件)是由人来设计、编写并装入计算机的。

1.3.1 计算机系统的组成

计算机系统的硬件部分由4大部件组成:输入部件、处理部件、存储部件和输出部件。计算机系统的组成如图1-1所示。图1-1 计算机系统的组成

现实世界中的问题要交给计算机系统来处理,需要把现实世界中的问题表示成一组互相之间有某种关联的数据,然后把这些数据交给计算机系统来处理。所以,输入部件、处理部件、存储部件和输出部件操作的对象都是数据。

输入部件用于向计算机输入数据。可输入的数据形式包括数字、字符、汉字、图片、声音等。具体的输入部件一般称做输入设备。常用的输入设备有键盘、鼠标、扫描仪、话筒等。处理具体应用问题的数据可以通过输入设备输入,程序设计人员编写的软件(或称程序)也可以通过输入设备输入。

输入计算机的数据由存储部件存储起来。任何电子装置只有通和断两种明显的状态,两种状态只可以表示两个基本信息。但要输入到计算机中的数据和程序的信息量远不止两个,如何解决这个问题呢?方法是让电子装置的通和断两种状态分别对应符号“0”和“1”。就像英语的26个符号可以组成所有英语单词一样,可以用符号“0”和“1”的编码来表示各种信息。存储部件分为内存和外存两大部分。内存是数据进行处理时的临时存放地方,外存是数据输入后或处理结束后的永久存放地方。内存中存放和取出数据的速度相对较快,外存中存放和取出数据的速度相对较慢。外存设备有磁盘机、磁带机、光盘机等。外存设备的存储介质均可方便地更换,如光盘机中的光盘盘片可从光盘机中方便地取出,换为另外一张用户希望插入的光盘盘片。内存的存储容量是有限的。而对于外存来说,由于它的存储介质(如光盘盘片)可方便地更换,因此外存的存储容量在理论上是无限的。

对计算机中的数据进行某种有意义的操纵称做处理数据。处理部件用于完成数据的处理。计算机中具体的处理数据的例子有:对数值计算求值、分类单词或数字、修改文档或图片、绘图等。通常所说的计算机的中央处理器(Central Processing Unit,CPU)就是计算机的处理部件。

计算机处理后的数据需要进行输出,输出部件用于完成数据的输出。具体的输出部件通常称为输出设备。输出设备有两种类型,一种类型是把处理的结果通过输出设备立即显示出来,另一种类型是把处理的结果表示成某种形式的数据文件(如文档文件、图片文件等)存放在外存介质中,以做进一步的处理或以后再输出。常用的输出设备有显示屏、打印机、绘图仪等。

在计算机的硬件中,存储部件和处理部件是任何一台计算机都必须具有的。我们把存储部件和处理部件合起来称做计算机的主机。一台计算机的性能主要是由计算机的主机性能决定的。在计算机中,输入设备和输出设备是外部于计算机主机的部件,我们把输入设备和输出设备合起来称做外部设备。外部设备是独立于主机的、可随意增减的设备。外部设备对主机的独立性,以及外部设备的可随意增减性,构成了计算机硬件组成(主要是外部设备组成)的灵活性和多样性。

计算机的4个基本功能是:数据输入、数据存储、数据处理和数据输出。计算机硬件的四大部件对应了计算机的四大基本功能,即输入部件具有数据输入功能,存储部件具有数据存储功能,处理部件具有数据处理功能,输出部件具有数据输出功能。

硬件是计算机系统的“躯干”。要使一个计算机系统能完成计算任务,还需要有“大脑”(软件)。软件由程序和相关的文档组成。软件的主体是程序,程序是处理特定问题的计算机可识别的处理步骤的集合。计算机完成任何任务时,其所有的处理过程(或称计算过程)都是由软件控制决定的。

1.3.2 计算机系统的工作过程

计算机是帮助人们工作的工具。计算机系统要完成人交给的任何工作,都需要有人的参与。因此,计算机系统的工作过程如图1-2所示。图1-2 计算机系统的工作过程

归纳起来,计算机系统工作过程的一般步骤如下。

① 人通过操作命令把程序保存到外存介质(如硬盘、软盘、光盘)上,有些软件还需要通过操作命令安装到计算机上。所谓安装,是指不仅要把软件保存到外存介质上,还要把运行这些软件所必需的信息通知操作系统。

② 人通过输入设备输入程序运行所必需的数据。

③ 人通过某个操作命令让计算机运行某个已保存或安装在计算机上的程序。

④ 计算机通过输出设备输出程序运行的结果给人。

计算机系统帮助人完成计算任务或处理任务。当计算机系统运行程序来完成这些任务时,需要人输入必要的数据;当计算机系统得出计算结果时,需要把计算结果输出给人。我们把人和计算机系统的这种信息相互交流过程称做人机交互。对于大部分的处理任务,如果没有人机交互,即如果没有人的参与,通常是无法完成的。

图1-2中,使用计算机系统的人员通常称做用户。用户主要有3类:程序设计人员、系统管理人员和各个领域使用计算机的一般人员。程序设计人员是指开发计算机软件的计算机专业人员,系统管理人员是指管理计算机系统,以及为各种用户提供服务的计算机专业人员,各个领域使用计算机的一般人员是指利用计算机完成某个特定任务的任何人员。

大部分计算机系统中使用的计算机都是通用的。所谓通用计算机,是指组成计算机系统的硬件部分都是相同的或者近似相同的。当需要完成不同的任务时,只需运行不同的软件就可以了。相对于通用计算机来说,还有一种计算机称为专用计算机。所谓专用计算机,是指这些计算机是为完成特定任务而专门设计的。通用计算机上运行的软件一般无法在这些专用计算机上运行,通用计算机一般也无法运行这些专用计算机上运行的软件。由于专用计算机是针对特定问题专门设计的,所以对于这些特定的问题来说,使用专用计算机比使用通用计算机来完成的效率要高。我们使用的大部分计算机都是通用计算机。

1.4 软件

软件是计算机系统的大脑。软件是计算机系统能完成各种各样任务的关键。软件的主体是程序,那么,程序是如何设计的?这些程序又是如何让计算机硬件识别的呢?

1.4.1 算法

程序的核心是算法。算法是描述求解问题方法的操作步骤集合。早在计算机发明以前,算法就是数学家的工具。数学家用算法来描述特定问题的解决方法。例如,数学家给出的求解两个整数的最大公约数的算法如下。

① 令M为两个整数中的较大者,N为两个整数中的较小者。

② 用M除以N,令R为M除以N的余数。

③ 若R不等于0,则令M等于N,N等于R,返回步骤②继续;若R等于0,则N中的数值就是两个整数的最大公约数。

算法给出了对求解特定问题方法的指导,有了算法,即使一个不理解求解方法原理的人,也可以按照算法描述的求解步骤一步一步地得到正确的结果。例如,一个学习并理解了上述求解两个整数的最大公约数算法的人,就可以按照算法的求解步骤,求出48和32的最大公约数。求解过程如下:

① 令M=48,N=32;

② 48除以32的余数为16,R=16;

③ 因为R不等于0,所以M=32,N=16;

④ 32除以16的余数为0,R=0;

⑤ 因为R等于0,所以48和32的最大公约数为N=16。

从数学家发现求解问题的算法,到学习掌握了算法的人求解具体问题的过程,我们可以得出结论,算法可以在人类之间传递智能。所有科学技术和工程技术方面新方法、新技术的发明和推广使用过程,都可以概括成利用算法的智能传播过程。既然算法可以在人类之间传递智能,那么,如果把人类求解问题的方法设计成算法,然后把这样的算法传递给机器,并让机器执行这样的算法,就可以把人类的智能传递给机器。人类之间利用算法传递智能的过程,以及人和机器之间利用算法传递智能的过程如图1-3所示。

要让人利用算法把智能传递给机器,需要做到的是:机器必须能识别并执行算法。冯·诺依曼体系结构的计算机,就是这样的能识别并执行算法(或者说,能接受智能)的机器。图1-3 不同主体之间的智能传递过程

在冯·诺依曼体系结构的计算机中,程序也可以看成是计算机能理解的求解某一特定问题的算法。对于上述求解两个整数的最大公约数问题来说,如果能把这样的算法让计算机硬件理解,计算机硬件就可以像人那样,根据算法和人输入的数据(如M=48,N=32),一步一步地按照算法的步骤执行,最后得到48和32的最大公约数为16的计算结果。

因此,程序设计的主要内容是寻找求解特定问题的算法。

1.4.2 程序设计语言

算法通常是以人能理解的语言描述的。为了让计算机能理解算法,计算机必须具有自己的语言系统。我们把计算机能理解的语言称做程序设计语言。程序设计语言规定了书写程序可使用的一组记号和一组语法规则。前面讲过,程序是处理特定问题的计算机可识别的操作步骤集合,换一种说法,也可以说,程序是用程序设计语言表示出来的求解特定问题的算法。

程序设计语言可以分为两大类:高级程序设计语言和低级程序设计语言。高级程序设计语言是抽取英语中若干个关键性单词,规定语法规则,计算机不能直接理解,但人容易掌握的一种程序设计语言。低级程序设计语言有机器语言和汇编语言两种。机器语言是用0、1编码表示各种操作命令和数据,人不容易掌握,但计算机能直接理解并执行的一种程序设计语言。汇编语言是在机器语言基础上,分别用助记符和标识符来表示操作命令和数据的一种程序设计语言。

目前,基本上所有的程序都是用高级程序设计语言编写的。虽然计算机不能直接理解高级程序设计语言,但由于构成高级程序设计语言的语句含义明确、无二义性,所以高级程序设计语言的每条语句都可对应为一组机器语言语句。根据这种对应关系,人们编写了一种称做编译程序的特殊程序,用来把高级程序设计语言形式的程序翻译为机器语言形式的程序。

高级程序设计语言程序需要通过编译程序翻译为机器语言程序,就像一个只懂中文的人和一个只懂英文的人交谈需要一个翻译一样。人用易于掌握的高级程序设计语言编写程序,这样的高级程序设计语言程序通过编译程序被翻译为计算机能直接理解并执行的机器语言程序。

和高级程序设计语言程序类似,汇编语言程序最终也要翻译为机器语言形式的程序。

C语言是一种高级程序设计语言,用C语言书写的求解两个整数的最大公约数的程序如下:

程序中,符号“//”表示注释语句,其后的内容为注释内容。注释语句是为方便人理解程序而添加的。可以看出,该程序和前面的算法表示的内容完全相同,只是算法是以人能理解的语言表示的,而程序是以计算机能理解的语言表示的。

令两个整数分别为28和42,在计算机上运行该程序的过程如下:

1.4.3 软件的体系结构

软件是计算机系统的“大脑”。在计算机发明的初期,计算机系统的“大脑”是非常简单的。随着计算机理论的发展,以及计算机硬件技术发展的强力推动,计算机软件技术有了飞速的发展。

软件技术的发展首先体现在软件的结构上。软件一般分成系统软件和应用软件。系统软件用于扩展系统本身的功能。应用软件用来完成用户的特定任务。系统软件又分为两部分,最基础的一部分系统软件是操作系统,另一部分是支撑软件(也称做实用软件)。操作系统是直接作用在计算机硬件上,提供计算机资源管理等基础性服务的软件。支撑软件是直接作用在操作系统上,为应用软件提供各种必要支持的软件。例如,对于程序设计人员来说,如果他编写的程序使用的是高级程序设计语言,那么,计算机要运行这样的程序,就需要支撑软件——编译程序的支撑。

操作系统、支撑软件、应用软件构成了软件的积木式体系结构。与积木结构不同的是,积木结构是下层大上层小,而软件的体系结构是下层小上层大,上层的软件数量远远大于下层的软件数量。

习题1

1-1 简述计算机发明过程中的3件大事。

1-2 简述计算机硬件的发展简史。

1-3 列出巨型计算机、大型计算机、中型计算机、小型计算机、微型计算机的性能排列次序。

1-4 计算机硬件的四大部件是什么?它们各自能完成什么功能?

1-5 计算机的主机包括哪些部分?计算机的外部设备包括哪些部分?

1-6 什么叫软件?什么叫程序?

1-7 什么叫计算机系统的用户?计算机系统的用户分为几类?

1-8 简述计算机系统的工作过程。

1-9 什么叫算法?为什么说算法可以在人类之间传递智能?

1-10 如果要利用算法在人和机器之间传递智能,需要有什么样的前提条件?

1-11 写出计算圆周率的算法。

1-12 什么叫高级程序设计语言?什么叫机器语言?计算机硬件是怎样理解高级程序设计语言程序的?

1-13 软件有几大类?一般用户使用的软件属于哪一种类型的软件?

第2章 数据存储

计算机要处理数据,就必须首先把要处理的数据存储起来。数据存储有两个方面的问题:一个是数据表示的方法问题,另一个是数据存储的设备问题。本章首先讨论各种数据的表示方法,然后讨论用于存储数据的内存和外存部件。内存是数据进行处理时的临时存放地方,外存是数据的长期或永久存放地方。存放在外存介质上的一组数据集合称为一个文件。

2.1 符号“0”和“1”

电子装置可以有两种状态,如开关的“开”和“关”,电路的“通”和“断”。我们可以用“0”和“1”这两个符号来分别表示这两种状态。所谓符号“0”和“1”,只是两个标识符号,如整数里的“0”或“1”,或字符的“A”或“B”。符号“0”和“1”绝对不是数字0和数字1。当然,如果用符号“0”和“1”分别表示数字0和数字1,那么它们就是数字0和数字1了。

作为标识符号,单个的符号“0”和符号“1”只能表示两个最基本的符号或状态。但是,就像26个英文字母可以组合出英语的所有文字一样,如果把若干位这样的符号组合起来,也可以表示数字、字符、汉字、图像等各种形式的数据。

2.2 数字的表示和运算

计算机可以存储和处理各种形式的数据,其中,最重要的是数字形式的数据。

数字的计算机表示方法是用符号“0”和“1”构造二进制计数系统。由于数字存在运算问题,所以在表示数字时要考虑数字的运算问题。因为补码表示方式可以方便地实现二进制数的加法和减法运算,所以计算机中,二进制数多采用补码方式表示。整数型数据采用的是小数点位置固定的定点表示法,小数型数据采用的是小数点位置浮动的浮点表示法。

2.2.1 二进制数

当符号“0”和“1”分别表示数字0和1时,就可以构造逢二进一的二进制计数系统。

在日常生活中采用的十进制计数是一种权计数法。所谓权,就是不同位置的数字代表不同的含义。例如,十进制数345的含义如图2-1(a)所示。因为十进制数345中数字3位置的权值为100,数字4位置的权值为10,数字5位置的权值为1,所以十进制数345表示2103(100+4(10+5(1,或十进制数345表示3(10+4(10+5(10。

我们可以用相似的方法表示二进制数,二进制数1001的含义如图2-1(b)所示。因为二进制数1001中各数字从左至右的权值分别为8、4、2、1,所以二进制数1001表示1(8+0(4+0(2+1(1,或二3210进制数1001表示1(2+0(2+0(2+1(2。图2-1 十进制数和二进制数的含义

表2-1给出了十进制数0~19的二进制数表示方法。表2-1 十进制数和二进制数转换表

任何一个数字,既可以表示成十进制数形式,也可以表示成二进制数形式。人们习惯于把数字表示成十进制数形式。但很显然,二进制数形式的数字对计算机来说更合适。这就存在十进制数和二进制数之间的相互转换问题。由于十进制数和二进制数只是数值的两种不同表示方法,并不表示其本质的改变,因此,十进制数和二进制数之间必然可以相互转换。为了区别十进制数和二进制数,在下面的讨论中,在数字后面用下标形式标出其进位制。例如,(101)表示该数是10十进制数,(101)表示该数是二进制数。2

1.二进制数转换为十进制数

二进制数转换为十进制数的方法是:用十进制计数制把二进制数各位置的数按权展开后相加。【例2-1】求(1001.101)的十进制数值。2

2.十进制整数转换为二进制整数

十进制整数转换为二进制整数的方法是:首先不断地对前次得到的商除2并列出其余数,然后把所得余数按从后向前的次序排列。该方法简称为除2取余法。【例2-2】求(19)的二进制数值。10

3.十进制小数转换为二进制小数

十进制小数转换为二进制小数的方法是:首先不断地对前次得到的积的小数部分乘2并列出该次得到的整数数值,然后按从前向后的顺序排列。该方法简称为乘2取整法。【例2-3】求(0.6875)的二进制数值。10

在十进制小数转换为二进制小数的过程中,有时会出现乘积的小数部分总不等于0的情况,如(0.4435)就不能在10步内使乘积的10小数部分等于0;甚至还会出现循环小数的情况,如(0.6)=(0.100110011001…)。在上述两种情况下,乘2过程的结束由102所要求的转换精度确定。

需要说明的是,十进制整数转换为二进制整数后,该二进制整数要比相应的十进制整数位数长很多,但十进制小数转换为二进制小数后,该二进制小数却并不比相应的十进制小数位数长。这是因为小数是分数的比值结果,无论是十进制小数还是二进制小数,其小数数值都只是自身分数的比值结果。例如:

2.2.2 二进制数的计算机内部表示方法

实际使用的二进制数可分为二进制整数和二进制实数两种。在计算机内部,分别用定点数和浮点数表示二进制整数和二进制实数。

1.定点数

定点数是指小数点的位置固定不变的数。在计算机中,通常用定点数表示二进制整数,因此定点数的小数点位置通常固定在数值的最后。一个8位长度的定点数表示格式如图2-2所示。其中,小数点的位置是隐含表示的,在实际表示中不需要专门表示出小数点;符号位为0表示该数为正数,符号位为1表示该数为负数。图2-2 定点数的格式

这样,二进制整数+1001001的计算机内部定点数形式就是01001001;二进制整数-1001001的计算机内部定点数形式就是11001001。

当人在纸上表示数值时,由于纸这种资源非常充分,所以在感觉上,人可以表示任意位数的数值。但是在计算机中,一旦确定了定点数的位数(即长度),它所能表示的数值范围就是固定的。例如,图 2-2 所示的8位长度的定点数所能表示的绝对值范围为:00000000~811111111,即0~2-1。

如果符号位为0表示正数,符号位为1表示负数,则图2-2所示的8位长度的定点数所能表示的数值范围为:-1111111~+1111111,77即-2~+2-1。

在8位长度的定点数表示中,任何超出上述表示范围的数,计算机都认定为出错。这种错误称为溢出出错。

2.浮点数

任何一个十进制实数都可以有以下几种不同的表示形式:

同样,二进制实数也可以用上述几种不同的表示形式表示,例如:

上述表示法称做记阶表示法。记阶表示法如图2-3所示。在记阶表示法中,一个数由5部分组成:尾符、尾数、阶符、阶数和基数。图2-3 记阶表示法

在图2-3中,基数2是固定不变的,如果已经确定一个实数是二进制实数,就可以省去该基数。所以,在计算机内部表示二进制实数时,可由尾符、尾数、阶符和阶数4部分组成。由于在这样的表示法中,小数点的位置是浮动的,所以这样表示的二进制数称做浮点数。在计算机内部具体表示一个浮点数时,必须指定该浮点数的小数点位置,通常把所有尾数都看成小数。这样,计算机内部浮点数的表示格式如图2-4所示。其中,阶符和尾符都是0表示正,1表示负。图2-4 浮点数的格式10

按照如图2-4所示的浮点数格式,二进制数-0.1001×2在计算机中的浮点数形式就是0 10 1 1001。

用记阶表示法表示数时,相同的数可以有许多种不同的表示形式。例如:

而用浮点方法表示上述不同形式的数时,所需要的编码长度是不10相同的。例如,用浮点数表示-0.1001×2时,尾数需要4位,阶数需11要2位;用浮点数表示-0.01001×2时,尾数需要5位,阶数需要2100位;用浮点数表示-0.001001×2时,尾数需要6位,阶数需要3位。但是,存储设备的位数是有限的,当超出其位数范围时,多余的部分将丢失。例如,当用尾数位只有4位,阶数位只有2位的浮点数格式10010表示-0.001001×2时,计算机中存储的数据将是-0.0010×2,从而使数据的精度降低。

为了有效地表示二进制数,通常规定尾数的第一位不能为0,即小数点后的数值不能为0。这种形式的浮点数称为规范化的浮点数。10例如,-0.1001×2就可以直接表示成规范化的浮点数,其浮点数形式是:

0 10 1 100111100

而-0.01001×2和-0.001001×2就不可以直接表示成规范化的浮点数,需要进行适当的转换。

上面举的浮点数例子都是8位编码长度的,其表示的数值范围非常有限。目前使用的计算机中表示浮点数的编码长度大都是64位的。

我们知道,两个记阶表示法表示的实数可以进行四则运算。其中加法的运算方法是:首先使两个实数的阶码值相同,然后把两个实数的尾数相加。例如:

两个浮点数的相加也是按照同样的方法完成的。

2.2.3 二进制数的运算

1.二进制数加法和减法

两个一位二进制数进行加法时只可能有4种情况,即0+0=0,0+1=1,1+0=1,1+1=10。两个多位二进制数进行加法时存在进位,对每位来说,相当于3个一位二进制数进行加法,这样,可能有8种情况,即0+0+0=0,0+0+1=1,0+1+0=1,1+0+0=1,0+1+1=10,1+0+1=10,1+1+0=10,1+1+1=11。【例2-4】求10110011+111001=?

因此,10110011+111001=11101100

两个一位二进制数进行减法时只可能有4种情况,即0-0=0,1-0=1,1-1=0,0-1时不够减,需要向高位借位,借位后有10-1=1。【例2-5】求110011-11101=?

因此,110011-11101=100110

2.补码

和十进制数四则运算一样,二进制数四则运算也有加、减、乘、除运算。要在计算机中实现二进制数四则运算,计算机中就应该有加法装置、减法装置、乘法装置和除法装置。我们知道,乘法运算可以用若干次加法运算实现,除法运算可以用若干次减法运算实现。这样,为简化计算机硬件设计的复杂性,硬件中可以不包含乘法装置和除法装置。

是否还可以去掉减法装置呢?回答是肯定的,但要求二进制数采用一种称为补码的表示方法。补码就是把二进制的正数和负数表示成一种统一的去掉符号的纯数值形式。

一个二进制数的补码由两部分组成。一部分是数值部分,取值方法为:当二进制数为正时,其补码的数值部分和该二进制数相同;当二进制数为负时,其补码的数值部分为用高位为1、低位为0的足够大的二进制数减去该数的差。另一部分是符号位,当二进制数为正时,符号位为0;当二进制数为负时,符号位为1。

按照上述补码的定义,要得到正数的补码,其方法非常简单。例如,正数1011的补码就是0 1011,前边最高位的0表示原二进制数为正数。

但是,要得到负数的补码,其方法要复杂一些。【例2-6】求-1011的补码。

因此,-1011的补码为1 0101,前边最高位的1为补码的符号位。

实际上,计算机实现时有非常简单的直接把一个二进制数表示为补码的方法。具体方法是:当二进制数为正时,其补码的数值部分和该二进制数相同;当二进制数为负时,其补码的数值部分为,先把该二进制数各位的0变为1,1变为0,然后再加1。当二进制数为正时,符号位为0;当二进制数为负时,符号位为1。例如,例2-6的-1011的补码求法如下。

第一步:求反,1011变为0100。

第二步:加1,0100+1=0101。

所以,-1011的补码为1 0101,这与例2-6求出的结果相同。

表2-2给出了长度为2的二进制数的补码。表2-3给出了长度为3的二进制数的补码。表2-2 长度为2的二进制数的补码表2-3 长度为3的二进制数的补码

注意,十进制数-4表示成二进制数为-100,表示成补码为1 00。而十进制数3表示成二进制数为11,表示成补码为0 11。所以,前面讨论的8位长度的定点数所能表示的数值范围为:-1111111~77+1111111,即-2~+2-1。

3.补码的运算

对于补码来说,不仅两个二进制数的加法运算可以用补码的加法来实现,两个二进制数的减法运算也可以用补码的加法来实现。补码运算不仅用加法实现了减法,而且实现了正号和负号的数字化表示。补码运算的基本公式如下:

上式表示,两个二进制数相加后的补码等于这两个二进制数分别求补码后再相加。这个公式的证明并不难,这里不进行证明,有兴趣的读者可以自己证明。【例2-7】用补码求1001+0011=?

可见,补码加法和二进制数加法得到的结果相同。【例2-8】用补码求1001-1011=?

解:减去一个数等于加上该数的负数,因此可把减数表示为负数。-1011的补码为1 0101。

可见,补码加法和二进制数减法得到的结果相同。【例2-9】用补码求-1000-0011=?

解:-1000的补码为1 1000,-0011的补码为1 1101。

可见,补码加法和两个二进制负数相加得到的结果相同。

从以上例子可见,补码有两个重要特点:① 二进制数的加法运算和减法运算都转换成了补码的加法运算;② 符号位直接参加运算。因此,在计算机中,是用补码加法运算来实现二进制数的加法运算和减法运算的。

当用补码求出运算结果后,把补码再变为二进制数的方法是:当符号位为0时,相应的二进制数为正,其数值部分为该补码的数值部分。例如,补码0 0011的二进制数为+0011。当符号位为1时,相应的二进制数为负,其数值部分为再次对该补码的数值部分求补码的结果。例如,补码1 0101的二进制数为-1011。

这样,对于数值的四则运算来说,可以用补码编码方法来实现减法,用只包含加法操作的一个算法来实现乘法,用只包含减法操作的一个算法来实现除法。这样,计算机硬件只需设计出可以实现两个二进制数相加的加法器就可以实现算术的四则运算。

包括输入和输出过程的计算机实现加法和减法运算的完整过程如下:

① 把用户输入的十进制数转换为二进制数;

② 把二进制数转换为补码;

③ 实现补码加法;

④ 把补码形式的运算结果转换为二进制数;

⑤ 把二进制数转换为十进制数输出给用户。

在以上各步骤中,除完成补码加法操作的任务由硬件中的加法器实现外,其余任务一般均用软件实现。

2.3 其他形式数据的表示

除数字形式的数据外,数据的其他形式还有字符、汉字、图像等。和数字形式数据不同的是,字符、汉字、图像等形式的数据不存在运算问题。这些形式的数据表示采用的是编码方法。

2.3.1 字符的表示

1.字符的0、1编码

大小写字母、数值符号、标点符号和一些控制符号等称做字符。计算机内部表示字符的原理和人们用26个英文字符表示单词的方法类似。人们可以用26个英文字符表示出数万个单词,同样,也可以用符号“0”和“1”表示出字符。我们把用若干位“0”、“1”符号表示字符的方法称做字符编码。因为“0”、“1”符号表示的字符是字符的一种代替编码,所以也把字符的编码称做字符的代码。

人们可以构造出很多种字符编码,但要实现不同计算机之间的数据交换,必须规定字符编码的标准。计算机中最常用的字符编码标准是ASCII码(美国标准信息交换代码)。ASCII码是一种用7位“0”、“1”符号表示字符的编码方案。ASCII码已形成事实上的标准,ISO(国际标准化组织)制定的ISO646码,即信息处理交换用的7位编码字符集,将其定为国际标准。表2-4给出了ASCII码128个字符的编码。表2-4 ASCII码

ASCII码只有128个符号,随着计算机的发展,需要编码的字符增多。扩展ASCII码是在ASCII码基础上制定的有256个符号的编码。扩展ASCII码为8位,第8位为0时,表示的128个符号和原先的相同,第8位为1时,表示的128个符号主要用做控制或通信。

任何字符在计算机中存储和传送时都表示成0、1的编码形式。计算机中数据的基本单位是字节。一个字节是8位二进制位。因此,ASCII码表示的128个字符编码的最高位为0。例如,字符hello在计算机中的表示形式如图2-5所示。图2-5 字符hello的计算机内编码

数字0~9作为字符也有相应的编码。这样,十进制数值0.6875就有两种表示格式;一种是2.2节中讨论的数字表示方法,即把十进制数值0.6875表示为二进制数值0.1011;另一种是把十进制数值0.6875中的每位数(包括小数点)都看做一个字符,则0.6875的ASCII码为:

前一种格式称为二进制数格式,后一种格式称为ASCII码格式。显然,数值的ASCII码格式表示的长度,要比相应的二进制数格式表示的长度长很多。表2-5 十六进制编码表

2.字符的十六进制码形式

从图2-5可见,字符在计算机内的表示格式比较长。这在计算机内存储数据和传送数据时没有任何问题,但当程序中出现问题,需要把计算机内存储或传送的数据显示在屏幕上或打印到纸上时,这样的表示格式就很不方便。这时就可以把字符的计算机内编码显示成十六进制编码形式。

我们把一位0、1符号称做一个二进制码,则字符的十六进制编码就是把4位二进制码用一个符号表示。因为4位二进制码共有16种不同状态,故这种编码称为十六进制编码。十六进制编码表见表2-5。

显然,字符编码的二进制码形式可以用字符编码的十六进制码形式替代。字符hello的十六进制码形式如图2-6所示。要说明的是,字符编码的十六进制码形式只是字符编码的二进制码形式的另外一种表示方式,它是为了方便人阅读而做的表示形式上的一种转换,字符在计算机内还是以二进制码形式存储和传送的。图2-6 字符hello的十六进制码

3.字符的八进制码形式表2-6 八进制编码表

也可以把3位二进制码用一个符号表示。因为3位二进制码共有8种不同状态,故这种编码称为八进制编码。八进制编码表见表2-6。

同样,字符的八进制编码只是字符的二进制编码的另外一种表示形式。

2.3.2 汉字的表示

汉字也可以用与字符相同的方法编码表示。但是,汉字编码需要考虑以下两个问题。

① 汉字通常是与字符混合使用的,因此,汉字编码方案要考虑与字符编码方案的兼容问题。

② 汉字不是拼音文字,不能像英文那样只对26个字母编码就可以解决英文单词的编码。汉字是方块文字,并且个数很多,所以用于编码的符号位数要更多一些。

ISO646码,或者说ASCII码,是一种用7位二进制码表示字符的编码。计算机的基本存储和传送单位是字节,一个字节是8位二进制码,因此,7位二进制码表示的字符在计算机中存储和传送时,字节的最高位添0,例如,字符h的ASCII码为100 1000,但字符h在计算机中存储和传送时表示为0100 1000。根据字符编码的这一特点,可以规定,字节的最高位为0时为字符编码,字节的最高位为1时为汉字编码。这样就可以解决汉字编码和字符编码的兼容问题。

由于汉字个数多,采用一个字节的编码方法显然不行,因此可采用两个字节或多于两个字节来表示一个汉字的编码方法。GB2312—80码(信息交换用汉字编码字符集——基本集)就是根据这样的方法制定的汉字编码的中国政府标准。GB2312—80码也称做国标码。

分析表2-4的ASCII码,其中前边0~31,共计32个字符是控制字符,第2列的首字符(SP)和第7列的末字符(DEL)也可归入控制字符。控制字符在计算机设备之间的数据交换中有特定的含义,因此不能改作他用。除控制字符外的其余94个字符可用来编码汉字。汉字个数太多,有数万个之多,但常用的汉字仅5千个左右。94(94=8836,因此可用两个字节编码表示一个汉字。GB2312—80码中编码的常用汉字共计6763个,另外还编码有汉语注音字母、希腊字母、拉丁字母、俄文字母、日文假名等。因为GB2312—80码只编码了常用的6763个汉字,所以GB2312—80码也称为常用汉字编码。在GB2312—80码中,汉字“啊”的二进制编码为10110000 10100001,汉字“啊”的二进制码具体格式如图2-7所示。图2-7 汉字“啊”的编码

如果要设计表示全部汉字的编码,那么,每个汉字的编码长度必须大于2字节。目前,国际标准化组织已设计了4字节的编码,这种编码可表示世界上所有国家的文字。

这里讨论的汉字编码是指汉字在计算机内存储和处理时的编码,因此也称为汉字的机内码。汉字还有输入码和输出码,汉字的输入码是指用户通过键盘输入汉字时的编码,汉字的输出码是指通过输出设备输出汉字时的编码。汉字的输入码和输出码将在第4章中讨论。

2.3.3 图像的表示

1.表示方法

除数字、字符和汉字外,计算机存储、处理的数据形式还有图像。图像有黑白图像和彩色图像两种。但是,字符和汉字表示方法有统一的国际标准,而图像的表示方法比较杂乱,还未形成统一的国际标准。目前,图像的表示方法主要有两大类:位图和矢量图。

位图是用描绘图像的点的集合来表示图像的,这些点称为像素点。位图表示图像的原理与照片的原理类似。对于黑白图像,像素点值为0表示白色,像素点值为1表示黑色。这样,一个1024(1024像素点的黑白图像,就表示为1024(1024个二进制码串。对于彩色图像,其实现方法是在黑白图像方法的基础上,再增加每个像素的色彩编码。但色彩的变化范围很大,当对像素点的色彩用一个字节来编码表示时,其色彩变化范围为0~255,共计256色。当图像的色彩变化比较丰富时,这样编码的彩色图像就会感觉有些失真。目前,最具真实感觉的彩色图像采用3个字节对像素点的色彩进行编码,3个字节分别对应红、绿、蓝3种基色,这样每个像素点的色彩就是红、绿、蓝3种基色的结合。使用绘图软件绘制图形或图像,绘图软件中的单色位图就表示黑白图像,256色位图就表示用一个字节编码表示色彩,24位位图就表示用3个字节编码表示色彩。如图2-8(a)所示为黑白位图图像,如图2-8(b)所示为Windows中的彩色位图图像。图2-8 位图

位图表示方法的优点是方法简单,其缺点是图像不能任意放大,因为图像放大后会失真。造成图像放大失真的原因是,该方法用像素点的集合表示图像,而当图像放大时,像素点间的空隙也被等比例地放大,从而造成失真。

矢量图用直线和弧线的集合表示图像。当图像放大时,线段也被等比例放大,所以,用矢量图方法表示的图像可以任意放大。用直线和弧线表示图像的矢量图方法较位图的像素点方法要复杂许多。

2.压缩存储问题

按上面讨论的方法,彩色图像进行编码后的信息量非常大。例如,一个1024(1024像素点,用3个字节对像素点的色彩进行编码的彩色6图像,其二进制码串长度为1024(1024(24=25165824≈25(10。可见,存储彩色图像需要很大的存储空间。因此,对图像采用压缩存储方法就变得十分必要。

目前,已经提出了许多图像压缩存储方案,其压缩存储效率各不相同。GIF、JPEG、MPEG等是目前较为流行的图像压缩存储方案。图像文件的不同后缀.gif、.jpeg或.mpeg就代表了该图像文件的不同压缩存储格式。

2.4 逻辑代数的基本概念

逻辑代数起源于19世纪初。逻辑代数研究逻辑量的运算关系。逻辑量有两个:一个是真,一个是假。基本的逻辑运算包括:逻辑与(AND)、逻辑或(OR)和逻辑非(NOT)运算。

逻辑与的定义:假AND假=假;假AND真=假;真AND假=假;真AND真=真。

逻辑或的定义:假OR假=假;假OR真=真;真OR假=真;真OR真=真。

逻辑非的定义:NOT假=真;NOT真=假。

用计算机实现逻辑运算时,通常用符号“1”表示真,用符号“0”表示假。这样,上述逻辑运算的定义可表示如下。

逻辑与的定义:0 AND 0=0;0 AND 1=0;1 AND 0=0;1 AND 1=1。

逻辑或的定义:0 OR 0=0;0 OR 1=1;1 OR 0=1;1 OR 1=1。

逻辑非的定义:NOT 0=1;NOT 1=0。

逻辑代数中的变量称做逻辑变量。和代数中的变量类似,逻辑变量也用字母符号(但通常用大写字母符号)表示。逻辑变量的取值或者为真(用符号“1”表示),或者为假(用符号“0”表示)。

设P和Q是两个逻辑变量,则逻辑表达式P AND Q有4种可能的取值结果,逻辑表达式P OR Q也有4种可能的取值结果,逻辑表达式NOT P有两种可能的取值结果,参见表2-7。表2-7 逻辑表达式的取值

逻辑代数是现实世界事物之间逻辑关系的一种抽象描述。逻辑表达式P AND Q可以有很多含义,例如,设逻辑变量P表示“昨天是晴天”,逻辑变量Q表示“昨天的最高温度是30℃”,则逻辑表达式P AND Q表示“昨天是晴天并且昨天的最高温度是30℃”。又如,设逻辑变量P表示“数值变量x的取值大于0”,逻辑变量Q表示“数值变量x的取值小于50”,则逻辑表达式P AND Q表示“数值变量x的取值大于0且小于50”。

逻辑表达式P OR Q也可以表示很多含义,例如,设逻辑变量P表示“昨天是晴天”,逻辑变量Q表示“昨天是阴天”,则逻辑表达式P OR Q表示“昨天是晴天或者是阴天”。又如,设逻辑变量P表示“数值变量x的取值小于0”,逻辑变量Q表示“数值变量x的取值大于50”,则逻辑表达式P OR Q表示“数值变量x的取值小于0或者大于50”。

逻辑表达式NOT P也可以有很多含义,例如,设逻辑变量P表示“昨天是晴天”,则逻辑表达式NOT P表示“昨天不是晴天”。又如,设逻辑变量P表示“数值变量x的取值大于0”,则逻辑表达式NOT P表示“数值变量x的取值不大于0(即小于等于0)”。

逻辑代数有广泛的现实用途。就计算机科学来说,在硬件设计方面,可以用基本的逻辑元件来实现逻辑代数中的各种基本逻辑操作,而基本的逻辑元件可以构成各种复杂的逻辑部件,从而可以设计出各种按照人希望的方式工作的硬件设备。下一节要讨论的触发器就是这样的设计结果。另外,逻辑元件还可以组合出各种各样的控制信号,用来控制和协调各个部件的工作过程。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载