当前位置:
首页 > 教材教辅 > 大学 > C语言程序设计与实践pdf/doc/txt格式电子书下载

C语言程序设计与实践pdf/doc/txt格式电子书下载

本站仅展示书籍部分内容

如有任何咨询

请加微信10090337咨询

C语言程序设计与实践pdf/doc/txt格式电子书下载

书名:C语言程序设计与实践pdf/doc/txt格式电子书下载

推荐语:

作者:廖小飞,李敏杰等编

出版社:电子工业出版社

出版时间:2015-08-01

书籍编号:30468188

ISBN:9787121262203

正文语种:中文

字数:130266

版次:1

所属分类:教材教辅-大学

全书内容:

C语言程序设计与实践pdf/doc/txt格式电子书下载






第1章 计算机程序设计概述


1.1 计算机系统组成


计算机是20世纪人类最伟大的创造发明之一,它是电子技术和计算技术空前发展的产物,是科学技术与生产力发展的结晶。计算机极大地推动了科学技术的发展,现已成为当今社会各行各业不可缺少的工具。


计算机是一种能够按照事先存储的程序,自动、高速地进行数值计算和信息处理的现代化智能电子设备。计算机系统由硬件系统和软件系统两部分组成。硬件系统是计算机系统的物理部分,是由电子线路、元器件和机械部件等构成的具体装置;软件系统是计算机系统中运行的各种程序、程序所需数据的集合。计算机系统的基本组成如图1-1所示。

C语言程序设计与实践pdf/doc/txt格式电子书下载

图1-1 计算机系统的基本组成

通常将运算器和控制器称为中央处理器(Central Processor Unit,CPU),将输入设备和输出设备称为I/O设备(输入/输出,Input/Output),将中央处理器和I/O设备合称为主机。


1.1.1 硬件系统


当前计算机都是冯·诺依曼结构的,硬件系统由5部分构成,如图1-2所示,各部分功能如下。


(1)控制器。控制器为计算机的控制中心,从存储器中读取并分析指令,根据指令要求完成相应操作。控制器产生一系列控制命令,使硬件系统各部分协调工作,完成程序和数据的输入和运算并输出结果。

C语言程序设计与实践pdf/doc/txt格式电子书下载

图1-2 冯·诺依曼结构计算机

(2)运算器。运算器是中央处理器的执行单元,是所有中央处理器的核心组成部分。运算器在控制器的控制下,接收运算数据,完成指令指定的二进制算术运算。


(3)存储器。存储器是可以被中央处理器直接访问而无须通过输入/输出设备的记忆设备。存储器用来保存程序和数据,以及存储运算时的数据和结果。


(4)输入设备。输入设备是用来完成输入功能的部件。通过输入设备可以向计算机送入程序、数据及各种信息。常用的输入设备有键盘、鼠标、扫描仪、磁盘驱动器和触摸屏等。


(5)输出设备。输出设备是用来将计算机的中间运行情况或运行后的结果进行表现的设备。常用的输出设备有显示器、打印机、绘图仪和磁盘驱动器等。


根据冯·诺依曼结构,计算机自动执行程序,即执行指令,可分为如下几个过程。


(1)取指阶段。从存储器某地址处取出要执行的指令,送到中央处理器内部的指令寄存器中暂存。


(2)译码阶段。对保存在指令寄存器中的指令进行分析,翻译出该指令对应的操作。


(3)执行阶段。根据译码结果向各个部件发出相应控制信号,完成指令规定的操作。


(4)取下一条指令。为执行下一条指令做好准备,即产生下一条指令地址。


1.1.2 软件系统


软件系统为指挥计算机工作的程序和程序运行时所需要的数据,以及所需要的数据和文档的集合。软件系统分为系统软件和应用软件两部分。


(1)系统软件。计算机系统必备的基本软件,是管理、监控和维护计算机硬件和软件资源、开发应用的软件。按功能可分为5类:操作系统(如Windows、Linux)、语言处理程序(如汇编程序、编译程序)、程序设计语言程序(如C、Java语言)、系统支持和服务程序(如系统诊断程序、查杀病毒程序)、数据库管理系统(如Oracle、SQL Server)。


(2)应用软件。由系统软件开发的,为解决计算机各类应用问题而编写的程序,具有较强的实用性。按功能可分为两类:用户程序(如天气预报软件)和应用软件包(如Microsoft Office套件)。


1.2 程序设计语言


使用计算机,就需要和计算机交换信息。为解决人们和计算机交流的问题,就产生了程序设计语言。程序设计语言是用于编写计算机程序的语言,根据程序设计语言的发展,可分为三个阶段:很难理解的机器语言、较难理解的汇编语言、脱离机器的高级语言。


1.机器语言


机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合,是计算机唯一能够直接识别的程序设计语言。机器语言具有灵活、直接执行和速度快等特点。机器语言是直接对计算机硬件产生作用的,因此不同类型的计算机采用的机器语言是不同的,没有通用性,使得机器语言很难被人们掌握和推广,通常只有计算机专家或专业人员才使用机器语言。


【例1-1】 以下是某CPU利用机器语言计算 a=a+b的代码,其中a=1,b=2。

C语言程序设计与实践pdf/doc/txt格式电子书下载

代码解释:


#01:令a=1;


#02:令b=2;


#03:将a和b的值相加,并将结果放在a中。


2.汇编语言


为了克服机器语言难理解、难编写、难记忆和易出错的缺点,人们就用与代码指令意义相近的英文缩写词、字母和数字等符号来取代指令代码,于是产生了汇编语言。汇编语言采用了助记符来代表低级机器语言的操作,它和机器语言基本上是一一对应的,更便于记忆。


用汇编语言编写的程序称为汇编语言源程序,需要汇编程序将源程序汇编或翻译成机器语言源程序后,计算机才能执行。


汇编语言和机器语言都是面向机器的程序设计语言,不同的机器具有不同的指令系统,一般将它们称为低级语言。


【例1-2】 以下是某CPU利用汇编语言计算 a=a+b的代码,其中a=1,b=2。

C语言程序设计与实践pdf/doc/txt格式电子书下载

代码解释:


#01:将数值1放入寄存器R0中;


#02:将数值2放入寄存器R1中;


#03:将寄存器R0的值和寄存器R1的值相加,结果放入寄存器R0中。


3.高级语言


计算机的发展促使人们去寻求一些与人类自然语言相接近且能为计算机所接受的语意确定、规则明确、自然直观和通用易学的计算机语言。这种与自然语言相近、与具体的计算机指令系统无关、其表达方式更接近人们对求解问题的描述方式的计算机语言称为高级语言。目前广泛使用的高级语言有PASCAL、C、C++、Java、C#等。


使用高级语言编写的程序称为源程序,计算机并不能直接接受和执行用高级语言编写的源程序,需要通过翻译程序翻译成机器语言形式的目标程序,再与有关的库程序连接成可执行程序,计算机才能识别和执行。这种翻译通常有两种方式:编译方式和解释方式。


【例1-3】 下面是利用C语言计算 a=a+b的代码,其中a=1,b=2。

C语言程序设计与实践pdf/doc/txt格式电子书下载

代码解释:


#01:使变量a等于1;


#02:使变量b等于2;


#03:将变量a和变量b相加,结果赋值给变量a。


1.3 计算机算法简介


做任何事情都有一定的步骤和方法,算法是在有限步骤内解决某一问题所使用的一组定义明确的规则。计算机算法是计算机能够执行的指令和规则,可分为两大类:数值运算算法和非数值运算算法。


1969年,Edsger W.Dijkstra首次提出了“结构化程序设计”的概念,1971年,Niklaus E.Wirth提出了“通过逐步求精方式开发程序”的思想,提出公式“算法+数据结构=程序”,一个程序应包括对数据的描述,在程序中要指定数据的类型和数据的组织形式,即数据结构(data structure);和对操作的描述,即操作步骤,也就是算法(algorithm)。


Donald E.Knuth在他的著作《计算机程序设计艺术》中将算法的特征归纳为如下特点。


(1)输入:一个算法有零个或多个输入。


(2)输出:一个算法应有一个或多个输出,输出是算法计算的结果。


(3)确定性:算法的描述必须无歧义,每个步骤应当是确定的,而不能是含糊的、模棱两可的,以保证算法的实际执行结果是准确符合要求或期望的,通常要求实际运行结果是确定的。


(4)有限性:一个算法应包含有限的操作步骤,而不能是无限的。


(5)有效性:又称可行性,算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。


1.3.1 算法举例


对于计算机程序设计人员,必须会设计算法,并根据算法编写程序。本节给出一些简单问题的算法。


【例1-4】 求解5!=1×2×3×4×5。


解答:


(1)对于该问题,最原始方法按照如下步骤求解。


步骤1:先求1×2,得到结果2;


步骤2:将步骤1得到的乘积2乘以3,得到结果6;


步骤3:将步骤2得到的乘积6再乘以4,得到结果24;


步骤4:将步骤3得到的乘积24再乘以5,得到结果120。


这样的算法虽然正确,但太烦琐,不适合编写计算机程序。


(2)改进后的算法如下。


设变量p为被乘数,变量i为乘数。


S1:令p=1;


S2:令i=2;


S3:使p×i,乘积仍然放在变量p中,可表示为p×i→p;


S4:使i的值加1,即i+1→i;


S5:如果i≤5,返回重新执行步骤S3以及其后的S4和S5;否则,算法结束。


该算法不仅正确,而且是较好的计算机算法,因为计算机是高速运算的自动机器,实现循环(S3、S4和S5)非常容易。


(3)对于改进后的算法,很容易进行扩展。


如果计算100!,只需将S5中的“i≤5”改成“i≤100”即可。


如果计算1×3×5×7×9,算法只需改动如下。


S2:令i=3;


S4:i+2→i;


S5:若i≤11,返回S3,否则结束。


【例1-5】 求解C语言程序设计与实践pdf/doc/txt格式电子书下载


解答:


(1)最原始方法按照如下步骤求解。


步骤1:求C语言程序设计与实践pdf/doc/txt格式电子书下载,得到C语言程序设计与实践pdf/doc/txt格式电子书下载


步骤2:将C语言程序设计与实践pdf/doc/txt格式电子书下载,得到C语言程序设计与实践pdf/doc/txt格式电子书下载


步骤3:将C语言程序设计与实践pdf/doc/txt格式电子书下载,得到C语言程序设计与实践pdf/doc/txt格式电子书下载


……


这样的算法不适合编写计算机程序。


(2)改进后的算法如下。


设变量sign为运算符号(+或者-),sum为运算结果,i为序列2,3,4,…,100中的一项:


S1:sign=1;


S2:sum=1;


S3:i=2;


S4:sign=(-1)×sign;


S5:item=sign×(1/i);


S6:item=sum+item;


S7:i=i+1;


S8:若i≤100,返回S4;否则结束。


1.3.2 算法的表示方法


为了表示一个算法,可以采用不同的方法。常用的方法有自然语言、流程图、N-S流程图、伪代码、计算机语言等。


1.用自然语言表示算法


自然语言就是人们常用的语言,如汉语或英语。用自然语言表示通俗易懂,但文字冗长,容易出现歧义,而且不方便用自然语言描述包含分支和循环的算法。除了很简单的问题,一般不用自然语言表示算法。


【例1-6】 用自然语言描述、计算并输出C语言程序设计与实践pdf/doc/txt格式电子书下载的算法。


解答:自然语言描述如下。


(1)输入x。


(2)判断x是否小于零,如果成立,则输出错误信息;否则,计算x的平方根并赋值给y,输出y的值。


2.用流程图表示算法


流程图是用一些约定的几何图形来描述算法,用流程图表示算法直观形象,易于理解。流程图的符号与意义如图1-3所示。


一个流程图包括表示相应操作的框、带箭头的流程线、框内外必要的文字说明等部分。


【例1-7】 将求5!=1×2×3×4×5的算法用流程图表示。


解答:用流程图表示求5!的算法如图1-4所示。

C语言程序设计与实践pdf/doc/txt格式电子书下载

图1-3 流程图的符号与意义

C语言程序设计与实践pdf/doc/txt格式电子书下载

图1-4 求5!的算法的流程图表示

3.用N-S流程图表示算法


美国学者I.Nasii和B.Shneiderman于1973年提出了一种新的流程图形式,将全部算法写在一个矩形框内,完全去掉了带箭头的流程线,这种流程图称为N-S流程图。

C语言程序设计与实践pdf/doc/txt格式电子书下载

图1-5 求5!的算法的N-S流程图表示

【例1-8】 将求5!=1×2×3×4×5的算法用N-S流程图表示。


解答:用N-S流程图表示求5!的算法如图1-5所示。


4.用伪代码表示算法


伪代码使用介于自然语言和计算机语言之间的文字和符号来描述算法,具有自然语言灵活的特点,同时又接近于程序设计语言的描述。


【例1-9】 将求5!=1×2×3×4×5的算法用伪代码表示。


解答:用伪代码表示求5!的算法如下所示。


开始


置p的初值为1


置i的初值为2


当i<=5,执行下面的操作:


使p=p×i


使i=i+1


(循环体到此结束)


打印p的值


结束


5.用计算机语言表示算法


我们的任务是用计算机解决问题,即用计算机实现算法,用计算机语言表示算法必须严格遵循所用语言的语法规则。


【例1-10】 将求5!=1×2×3×4×5的算法用计算机语言表示。


解答:用计算机语言表示求5!的算法如下所示。

C语言程序设计与实践pdf/doc/txt格式电子书下载

1.3.3 基本程序结构和流程图


已经证明:任何复杂的问题都可以用三种基本结构组成的程序完成。这三种基本结构是:①顺序结构,按指令的顺序依次执行;②选择结构,根据判别条件有选择地改变执行流程;③循环结构,有条件地重复地执行某个程序块。


三种基本结构有如下共同特点:①只有一个入口和出口;②结构内部的每部分都有机会被执行到;③结构内不存在“死循环”。


1.顺序结构


依次顺序地执行程序语句,如图1-6所示。

C语言程序设计与实践pdf/doc/txt格式电子书下载

图1-6 顺序结构

2.选择结构


首先判断条件C,若条件C成立,执行A程序块,否则执行B程序块,如图1-7所示。

C语言程序设计与实践pdf/doc/txt格式电子书下载

图1-7 选择结构

3.循环结构


循环结构可以减少源程序书写的工作量,用来描述重复执行的某段程序块。循环结构分为当型循环和直到型循环。


(1)当型循环结构:当条件C成立时,就执行A程序块,然后再次判断条件C是否成立,直到条件C的值不成立才向下执行,如图1-8所示。


(2)直到型循环结构:先执行A程序块,然后判断条件C是否成立,若条件C不成立,再次执行A程序块,直到条件C成立时才向下执行,如图1-9所示。

C语言程序设计与实践pdf/doc/txt格式电子书下载

图1-8 当型循环结构

C语言程序设计与实践pdf/doc/txt格式电子书下载

图1-9 直到型循环结构

1.4 数制及进制转换


数可以用两种方法来表示:①按“值”表示。在选定的进位制中表示出该数对应的值,称为进位制数;②按“形”表示。按照一定的编码方法,表示出该数特定的形式,称为编码制数。数的这两种表示方法涉及数制与编码,本节讲述数制及进制转换,下一节讲述数值编码。


1.4.1 基本进位制


1.十进制


十进制是最常用的数制,其特点如下。


(1)数码,表示数的符号。十进制数用0、1、2、3、4、5、6、7、8、9等10个符号表示,遵循“逢十进一”的原则,即9+1=10。


(2)基数,为数码的个数。十进制数的基数是10,即采用10个基本数码,任何一个十进制数都可以用10个数码按一定规律排列起来表示。


(3)位权,每一位所具有的值。0~9这10个数可以用一位数码表示,10以上的数则要用两位以上的数码表示。如数12,右边的“2”为个位数,左边的“1”为十位数,也就是12=1×101+2×100。因此,每一数码处于不同位置时,它代表的数值是不同的,即不同的数位有不同的位权。


十进制数表示的数值等于其各位加权系数之和,如数9876可写为

C语言程序设计与实践pdf/doc/txt格式电子书下载

其中,每位的位权分别为103、102、101、100


一般地,任意一个n位十进制正整数(D)10均可表示为:

C语言程序设计与实践pdf/doc/txt格式电子书下载

其中,下脚注10表示括号内的数是一个十进制数,也可以用下脚注D(Decimal)表示。ki是第i位的系数,为0~9当中的某一个数。如果一个数的整数部分有n位,小数部分有m位,则i的取值为-m到n-1之间(含-m和n-1)的所有整数。


【例1-11】 十进制数76543和2015.21可表示如下:

C语言程序设计与实践pdf/doc/txt格式电子书下载

2.二进制


二进制是计算机中广泛采用的一种数制,其特点如下。


(1)数码。二进制数用0和1两个符号表示,遵循“逢二进一”的原则,即1+1=10。


(2)基数。二进制数的基数是2,即采用两个基本数码,任何一个二进制数都可以用两个数码按一定规律排列起来表示。


(3)位权。二进制的各位位权分别为20、21、22、23……任意一个n位二进制正整数可表示为:

C语言程序设计与实践pdf/doc/txt格式电子书下载

其中,下脚注2表示括号内的数是一个二进制数,也可以用下脚注B(Binary)表示。


二进制数表示的数值等于其各位加权系数之和,例如:

C语言程序设计与实践pdf/doc/txt格式电子书下载

二进制数只有两个数码0和1,可以用任何具有两个不同稳定状态的元件来表示,如晶体管的饱和与截止,继电器接点的闭合与断开等。只要规定其中一种状态表示1,则另一种状态就表示0,这样就可以表示二进制数了。因此,二进制的实现装置简单可靠,容易用二极管、晶体管等电子器件来实现,具有十进制无法具备的优点,因此广泛应用在计算机系统中。


二进制数的位数通常很多,不便于书写和记忆,例如,要表示十进制数1111,若用二进制数表示则为10001010111,若用八进制数表示则为2127,若用十六进制数表示则为457,因此在计算机程序设计中,常使用八进制数或十六进制数来表示二进制数。


3.十六进制


中国历史上曾在质量单位上使用过十六进制,如16两为一斤(1斤=500g)。现在十六进制普遍应用在计算机领域。十六进制数特点如下。


(1)数码。十六进制数用0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F等16个符号表示(其中数值10~15分别用A~F来表示),遵循“逢十六进一”的原则,即F+1=10。


(2)基数。十六进制数的基数是16,即采用16个基本数码,任何一个十六进制数都可以用16个数码按一定规律排列起来表示。


(3)位权。十六进制的各位位权分别为160、161、162、163……任意一个n位十六进制正整数可表示为:

C语言程序设计与实践pdf/doc/txt格式电子书下载

其中,下脚注16表示括号内的数是一个十六进制数,也可以用下脚注H(Hexadecimal)表示。


十六进制数表示的数值等于其各位加权系数之和,例如:

C语言程序设计与实践pdf/doc/txt格式电子书下载

4.八进制


在计算机中,八进制数有时可以取代十六进制数,如Linux系统的文件权限设置。十六进制数除了0~9之外,要用到A~F等符号,八进制数不必用数字以外的符号来表示。


八进制的特点如下。


(1)数码。八进制数用0、1、2、3、4、5、6、7等8个符号表示,遵循“逢八进一”的原则,即7+1=10。


(2)基数。八进制数的基数是8,即采用8个基本数码,任何一个八进制数都可以用8个数码按一定规律排列起来表示。


(3)位权。八进制的各位位权分别为80、81、82、83……任意一个n位八进制正整数可表示为:

C语言程序设计与实践pdf/doc/txt格式电子书下载

其中,下脚注8表示括号内的数是一个八进制数,也可以用下脚注O(Octal)表示。


八进制数表示的数值等于其各位加权系数之和,例如:

C语言程序设计与实践pdf/doc/txt格式电子书下载

5.R进制


综上所述,对一个R(R≥2)进制数,基数为R,可以用R个符号表示一个R进制数,遵循“逢R进一”的原则。R进制的各位位权分别为R0、R1、R2、R3……任意一个n位R进制正整数可表示为:

C语言程序设计与实践pdf/doc/txt格式电子书下载

其中,下脚注R表示括号内的数是一个R进制数,ki表示第i位的系数,Ri为第i位的位权。R进制数表示的数值等于其各位加权系数之和。


1.4.2 进制数间相互转换


1.二进制数、八进制数、十六进制数转换成十进制数


二进制数、八进制数、十六进制数转换成十进制数的方法是按权相加,即求出各位加权系数之和,得到相应的十进制数。


【例1-12】 二进制数、八进制数、十六进制数转换成十进制数示例。

C语言程序设计与实践pdf/doc/txt格式电子书下载

2.十进制数转换成二进制数、八进制数、十六进制数


将十进制数的整数部分转换为二进制数、八进制数、十六进制数时,可以采用“除R倒取余数”法,R代表所要转换成的数制的基数,步骤如下。


步骤1:把该十进制数的整数部分除以基数R,取余数,即为最低位的数码k0


步骤2:将前一步得到的商再除以基数R,再取余数,即得次低位的数码k1


步骤3:重复以上过程,直到商为0结束,最后得到的余数即为最高位数的数码kn-1


将十进制数小数部分转换为二进制数、八进制数、十六进制数时,可以采用“乘R顺取整数”法,R代表所要转换成的数制的基数,步骤如下。


步骤1:把该十进制数的小数部分乘以基数R,取整数,即得小数的最高位数码k-1


步骤2:将前一步得到的乘积的小数部分再乘以基数R,再取整数,即得小数的次低位数码k-2


步骤 3:重复以上过程,直到乘积为零,或者达到所需求的精度为止。最后一次取的整数为小数的最低位k-m


【例1-13】 把十进制数987转换成十六进制数。


解答:

C语言程序设计与实践pdf/doc/txt格式电子书下载

因此,(987)10 =(3DB)16


【例1-14】 将十进制数75.56转换为二进制数(误差ε<1/26 )。


解答:(1)整数部分,采用“除2倒取余数”法转换。

C语言程序设计与实践pdf/doc/txt格式电子书下载

(2)小数部分,采用“乘2顺取整数”法转换。

C语言程序设计与实践pdf/doc/txt格式电子书下载

因此,(75.56)10 =(1001011.100011)2转换到第6位小数时误差ε<1/26


3.二进制数与十六进制数的相互转换


(1)将二进制正整数转换为十六进制数


将二进制数从右向左开始,每4位分为一组(不足4位左补0),每组都相应转换为一位十六进制数。


【例1-15】 将二进制数11010110111101转换为十六进制数。


解答:

C语言程序设计与实践pdf/doc/txt格式电子书下载

因此,(110101101111101)2 =(35BD)16


(2)将十六进制正整数转换为二进制数


将十六进制数的每一位转换为相应的4位二进制数即可。【例1-16】 将十六进制数F9E8转换为二进制数。


解答:

C语言程序设计与实践pdf/doc/txt格式电子书下载

因此,(F9E8)16=(1111100111101000)2


4.二进制数与八进制数的相互转换


(1)将二进制正整数转换为八进制数


将二进制数从右向左开始,每3位分为一组(不足3位左补0),每组都相应转换为一位八进制数。


【例1-17】 将二进制数11010110111101转换为八进制数。


解答:

C语言程序设计与实践pdf/doc/txt格式电子书下载

因此,(11010110111101)2=(32675)8


(2)将八进制正整数转换为二进制数


将八进制数的每一位转换为相应的3位二进制数即可。


【例1-18】 将八进制数7654转换为二进制数。


解答:

C语言程序设计与实践pdf/doc/txt格式电子书下载

因此,(7564)8=(111110101100)2


为了方便转换,表1-1分别给出了二进制数/十六进制数和二进制数/八进制数的换算表。

表1-1 二进制数/十六进制数和二进制数/八进制数的换算表

C语言程序设计与实践pdf/doc/txt格式电子书下载

1.5 数值编码


编码是信息从一种形式或格式转换为另一种形式或格式的过程。常用的编码有两类:一类是十进制编码,如美国信息交换标准代码(ASCII);另一类是二进制编码,如数的机器码表示。


1.5.1 美国信息交换标准代码(ASCII)


ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套计算机编码系统,主要用于显示现代英语。ASCII是现今最通用的单字节编码系统,被国际标准化组织(ISO)选定为一种国际通用的代码,广泛用于通信和计算机中。


标准ASCII 码也称为基础ASCII码,使用7 位二进制数来表示所有的大写和小写字母、数字0~9、标点符号及一些特殊控制字符。例如,空格的ASCII码为二进制数0100000;字符0的ASCII码为二进制数0110000;字符a的ASCII 码为二进制数1100001;字符A的ASCII码为二进制数1000001;控制符换行的ASCII码为二进制数0001010;控制符回车的ASCII码为二进制数0001101。


附录B.1给出了ASCII代码的对照表。


1.5.2 数的机器码表示


在计算机中为了表示正、负数,在数的最高位前设置一个符号位,并规定符号位为“0”时表示该数为正数;符号位为“1”时表示该数为负数。这种带有符号位的数称为机器数,机器数有原码、反码、补码三种表示形式。


1.原码


二进制原码最高位为符号位,其余各位为数值本身的绝对值,又称为“符号+绝对值”表示法。符号位“0”表示正数,符号位“1”表示负数。


例如,(+99)10的带符号位8位原码表示为(01100011),其中最高位的0代表正数符号的符号位,后7位是代表99这个数的二进制表示法。(-99)10的原码可表示为(11100011),其中最高位的1代表负数符号的符号位,后7位代表-99这个数的绝对值的二进制表示法。


零的原码有两种表示形式:(+0)=00000000,(-0)=10000000,机器遇到这两种情况都当作0处理。


原码表示法简单易懂,但在进行加、减法运算时,符号位不能直接参加运算,而是要分别计算符号位和数值位。当两数相加时,如果是同号,则数值相加;如果是异号,则要进行减法运算,此时还要比较两数的绝对值大小,先用大数减去小数,最后还要判断符号位,这样会导致运算速度将低。


为了解决该问题,引入数的反码和补码表示法。


2.反码


引入反码是便于求负数的补码。二进制反码表示法的规则是:正数的反码与原码相同,负数的反码是符号位为1,数值是对应原码各位取反。


例如,(+99)10的带符号位 8 位反码表示为(01100011),与原码相同。(-99)10的反码可表示为(10011100),其中最高位的1代表负数,后7位是-99的原码各位取反。


零的反码有两种表示形式:(+0)=00000000,(-0)=11111111。


3.补码


二进制补码表示法的规则是:正数的补码与原码相同,负数的补码是符号位为1,数值位逐位取反(求其反码),然后在最低位对整个数加1。


例如,(+99)10的带符号位 8 位补码表示为(01100011),与原码相同。(-99)10的补码可表示为(10011101),其中最高位的1代表负数,后7位是-99的原码的数值部分各位取反后加1。


零的补码只有一种形式:(+0)=(-0)=00000000。


一个负数的二进制补码转换成十进制数的规则是:最高位不变,其余位取反后加1得到原码。例如,补码11111001,取反后为10000

....

本站仅展示书籍部分内容

如有任何咨询

请加微信10090337咨询

本站仅展示书籍部分内容
如有任何咨询

请加微信10090337咨询

再显示