1、1绪论计算机基础知识学习目标计算机系统的基本组成计算机中的信息表示计算机指令、计算机语言及计算机程序设计的概念操作系统的作用二进制、八进制、十六进制以及它们的关系计算机中各种信息的编码2一台计算机是由以下几个主要硬件组成(如下图所示):输入设备输出设备内存通信设备存储设备中央处理器CPU总线这些组件通过一个称为“总线(bus)”的子系统连接,总线负责在这些组件之间传输数据和控制信号。(二)计算机的硬件系统1.计算机硬件结构32.计算机的主要部件及其功能(1)中央处理器(Central Processing Unit,CPU,“芯片”)它是计算机的大脑。它从内存中获取指令然后执行这些指令。cpu
2、通常由两个部分组成:控制单元(control unit,CU)“控制器”和算术/逻辑单元(arithmetic/logic unit,ALU)“运算器”。CU用于控制和协调除cpu之外的其他组件的动作;ALU用于完成数值运算(加、减、乘、除)和逻辑运算(比较或判断)。CPU的工作速度,较常见的芯片为2GHZ(可达到2亿条指令/每秒)(1HZ相当于1个脉冲周期/秒;1KHZ=1000HZ;1MHZ=1000KHZ;1GHZ=1000MHZ;)(假设执行1条指令需要10HZ,即10个脉冲周期;则 2GHZ 可达到2亿条指令/每秒)4cpu中“运算器”的内部结构,如下图所示:输出门加法器输入选择门通
3、用寄存器组AXBXPC.输入选择门5(2)内存(memory)用于存放CPU当前正在执行的程序和处理的数据。它是一种可以与CPU直接交换信息的存储器。内存.010010100110000101110110011000010011011000000110.字符J字符a字符v字符a字符内存地址.200020012002200320042005.内存利用电的两种状态:关(off)和开(on),习惯上把它们分别当做0和1。这些 0 和 1 被解释为二进制数字系统中的数,并通常被称为“比特”(bit,二进制数)。cpu要执行的指令以及各种类型的数据(数字、字符、字符串等),都被编码为某种约定的比特(0、
4、1)序列存储在内存中。在内存中,字节是最小的存储单元。内存其实是一个由字节组成的线性空间,每个字节都有一个唯一的地址(内存地址)。每个字节(byte)能存储8个比特。说明1:由于计算机是以字节为单位来分配内存的,所以,如果一个字节存放不下一个大数字,那么,计算机就会分配几个地址相邻的字节来存放之。说明2:内存字节中的内容永远非空,但其原始内容可能对你的程序无意义。一旦新的信息被存入字节,该字节中原来的内容将会丢失!说明3:程序中各种数据的编码都是由系统根据编码表来自动完成的(例如,在流行的ASCII编码表中,字符J是用一个字节01001010来表示的)。内存字节及其内容6计算机中存储器的大小通
5、常被称为“容量”,并且以字节(简写为B)、千字节(KB)、兆字节(MB)、千兆字节(GB)、万亿字节(TB)为计量单位:1KB(kilobyte)=1024B(byte)1MB(megabyte)=1024KB(kilobyte)1GB(gigabyte)=1024MB(megabyte)1TB(kilobyte)=1024GB(gigabyte)其中,1024=210。72)随机存取存储器(Random Access Memory,RAM)1)只读存储器(Read Only Memory,ROM)在物理上,内存实际上是由以下两部分组成的:其特点是:断电后,其中数据不会丢失。现代微机的主板上都
6、装有ROM,并在其中固化了一个“基本输入输出系统”BIOS,其功能是:(i)每当计算机启动时,完成对系统的加电自检。(ii)对系统中各种功能模块进行初始化。(iii)引导操作系统。(iv)为操作系统提供基本输入输出设备的驱动程序(键盘、显示器、打印机、时钟、扬声器、软盘、硬盘和光盘)。RAM 就是通常所说的“内存”。其特点是:一旦断电,其中的信息将会丢失。它被用来存放当前正在执行的程序和数据。8(3)存储设备(store)内存是不能长久保存数据的,因为断电时信息就会丢失。程序和数据都应该被永久地存放在存储设备上,当计算机确实需要使用它们时再装入内存。因为从内存读取数据要比存储设备快得多!所以,
7、store 也叫做“外存”(外部存储器),或叫做“辅存”(辅助存储器)。而内存则通常被叫做“主存”。存储设备主要有以下几种:磁盘驱动器光盘驱动器磁带驱动器USB闪存驱动器说明:驱动器(drive)是对存储介质进行读、写操作的设备。例如,磁盘、光盘、磁带等都是存储介质。9*关于计算机的存储体系:在现代计算机系统中,通常采用三级存储体系。如下图所示:CPU缓存(cache)主存(memory)外存(store)一级存储器缓存(cache)一种工作速度与CPU相匹配的存储器,价格较昂贵。用于存放CPU当前正在执行的那部分指令和数据。通常被设计在CPU的内部(容量为216MB)。二级存储器主存(mem
8、ory)一种工作速度低于CPU的存储器(又称内存),价格不太昂贵。用于存放CPU当前正在执行的程序和数据(容量为23GB)。三级存储器外存(store)一种工作速度远低于CPU的存储器,价格较低廉。用于存放CPU当前不使用的程序和数据(80250GB)。最新的缓存技术在缓存内部再分成二三级。在拥有三级缓存的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。10(4)输入设备(Input devices)接收用户输入的程序和原始数据,并将它们转变为计算机能识别的形式(二进制代码)存放到内存中。常用的输入设备有:键盘、鼠标、扫描仪、光笔等。(5)输出设备(Output dev
9、ices)将内存中计算机的处理结果(二进制代码)转变为人们所能接受的形式。常用的输出设备有:显示器、打印机、绘图仪等。(6)通信设备(Communication equipment)计算机可以通过通信设备进行联网。常用的通信设备有:调制解调器(Modem)、网络接口卡(NIC)等。11(三)计算机的软件系统(三)计算机的软件系统1.1.程序程序硬件仅是计算机得以运算的基础。要使计算机能具有运算和硬件仅是计算机得以运算的基础。要使计算机能具有运算和控制功能,还必须配置必要的计算机软件(控制功能,还必须配置必要的计算机软件(software)计算机程序(计算机程序(program)。)。程序:发给
10、计算机的一组指令程序:发给计算机的一组指令可以让计算机执行并完成所需任务的一个指令序列。可以让计算机执行并完成所需任务的一个指令序列。指令:告诉计算机该做一个什么操作的操作命令(也叫做指令:告诉计算机该做一个什么操作的操作命令(也叫做代码代码)。)。(1 1)指令系统()指令系统(Instruction set)最初植入计算机的一套机器指令集最初植入计算机的一套机器指令集机器语言机器语言由于计算机只能理解用由于计算机只能理解用0和和1编写的机器指令,因此编写的机器指令,因此,机器语言机器语言其实就是一套机器指令集及其语法规则。其实就是一套机器指令集及其语法规则。12下面显示了一段用机器语言编写
11、的程序:0100001101 100000 001101 11000100101 10001 1000001110111001111001 001 11000 00111000011100100010 00110注意:机器语言因CPU类型而异!13输出门加法器输入选择门通用寄存器组AXBXPC.输入选择门AXBXcpu中“运算器”的内部结构,如下图所示:“运算器”进行算术/逻辑运算的工作过程是:先从内存中将待处理的数据取至某些寄存器中,然后再将寄存器中的数据送入加法器并完成运算。14(2)指令的执行过程内容.1101101010110110.某指令的第一个字节第二个字节某指令的第一个字节第二个
12、字节.地址.8000800180028003.PCPCPC:Program Counter程序计数器:存放下一条指令的内存地址PC是CPU中的一个专用寄存器。每条指令的执行过程,可分为以下两个阶段:(i)取指阶段CPU从PC所指的内存地址中取出将要执行的指令;(ii)执行阶段CPU对该指令首先进行分析、译码、判断所要完成的操作,然后向相应的功能部件发出控制信号。最后,由这些功能部件去完成相应的操作。(3)程序的执行过程按程序(已存放在从某个字节开始的内存中)中指令的排列顺序,从第一条指令开始,重复上述步骤。10110110010011011101101010011010然后,PC指向下一条指令
13、。152.汇编语言(assembly language)比机器语言稍先进的程序设计语言是汇编语言。以下显示了一段用汇编语言编写的程序:main proc paymov ax,dsegmov ax,0b00hadd ax,damov al,blmul bi,axmov bl 04h16汇编语言源程序文件机器语言目标文件执行执行结果汇编器汇编语言允许程序员在程序中采用助记符,而不是用0和1以“简化”工作。助记符是一种辅助记忆的方法,这里指采用字母的缩写来代表指令。例如,用助记符add来代表加法操作、mul代表乘法操作、mov代表将数据从内存的一处移动到另一处。由于计算机只能识别机器语言,所以,需要
14、一个“汇编器”负责将汇编语言指令转换成机器代码:173.高级语言(high-level language)高级语言允许程序员使用类似英语的程序指令。下面显示了一段用BASIC语言编写的程序:input Enter name;nameinput Enter hours worked;hoursinput Enter pay rate;rategrossPay=hours*ratefederalTax=0.2*grossPay socSecTax=0.07*grossPay stateTax=0.06*grossPay netPay=grossPay-federalTax-socSecTaxpri
15、nt name,netPayend高级语言的程序指令很像英语,即使读者不懂BASIC语言,也不难理解上面的程序是在一步一步地指示计算机如何计算并显示出员工的净工资。18有一百多种高级语言,每一种都是为特定目的而设计的。最著名的有:COBOL(面向商业的通用语言)FORTRAN(面向数值计算)BASIC(易学易用)PASCAL(面向教学)C(具有汇编语言功能的高级语言)C+(适用于系统软件开发)Java(适用于互联网应用程序)19机器语言文件高级语言源程序文件编译器链接器库代码可执行文件(.exe)由于计算机同样不能理解高级语言,因此需要使用一个称为“编译器”的程序将源程序(或称为“源代码”)翻
16、译成机器语言程序。204.操作系统操作系统硬件应用程序用户操作系统的主要任务有:控制和监控系统的活动分配和调遣系统资源安排各程序的操作顺序操作系统(Operating System,OS)是运行在计算机上最重要的程序,它是运行在计算机硬件上的第一个程序负责管理和控制计算机的活动。比较流行的操作系统有MS Windows、Mac OS、Linux。如果没有操作系统,像IE、Word、vc+这样的应用程序就不能运行。硬件、操作系统、应用程序和用户之间的关系如图所示:操作系统的基本概念?(1)操作系统的定义?(2)操作系统的基本功能(1)操作系统的定义操作系统的定义?操作系统是一个大型的程序系统,它
17、负责计算机的全部软、硬件资源的分配、调度工作,控制协调多个任务的活动,实现信息的存取保护,并提供用户接口,使用户获得良好的工作环境。操作系统使整个计算机系统实现了高效率和高度自动化。(2)操作系统的基本功能?1)存储器管理的功能?2)处理机管理的功能?3)设备管理的功能?4)文件管理的功能1)存储器管理的功能)存储器管理的功能内存分配内存分配的主要任务是为每道程序分配内存空间,但要以存储器利用率最高、减少不可用的内存空间为准则,同时允许正在运行的程序申请附加的内存空间,以适应程序和数据动态增长的需要。内存保护内存保护的主要任务是确保每道用户程序在自己的内存空间中运行,互不干扰,也就是说绝不允许
18、用户程序访问操作系统和其他用户的程序和数据。?地址映射地址映射一个应用程序经编译后,通常会形成若干个目标程一个应用程序经编译后,通常会形成若干个目标程序,这些目标程序再经过链接而形成可执行程序。序,这些目标程序再经过链接而形成可执行程序。?内存扩充内存扩充由于物理内存的容量有限,难以满足用户的需要,存储器管理的任务就是在不增加物理内存的条件下存储器管理的任务就是在不增加物理内存的条件下,借助于虚拟内存技术从逻辑上去扩充内存容量,借助于虚拟内存技术从逻辑上去扩充内存容量,使用户所感觉到的内存容量比实际内存容量大得多。2)处理机管理的功能)处理机管理的功能处理机管理的主要任务是对处理机进行分配,并
19、对其运行进行有效的控制和管理。在多道程序环境下,处理机的分配和运行都是以进程为单位,所以对处理机的管理可理解为对进程的管理。?进程控制?进程同步?进程通信?CPU调度3)设备管理的功能)设备管理的功能?缓冲管理为达到缓解CPU和I/O设备速度不匹配的矛盾,达到提高CPU和I/O设备利用率,提高系统吞吐量的目的,许多操作系统通过设置缓冲区的办法来实现。?设备分配设备分配的基本任务是根据用户的I/O请求,为他们分配所需的设备。如果在I/O设备和CPU之间还存在设备控制器和通道,则还需为分配出去的设备分配相应的控制器和通道。?设备处理设备处理设备处理程序又称设备驱动程序。其基本设备处理程序又称设备驱
20、动程序。其基本任务是实现任务是实现CPU和设备控制器之间的通信。和设备控制器之间的通信。?设备独立性和虚拟设备设备独立性和虚拟设备用户向系统申请和使用的设备与实际操作用户向系统申请和使用的设备与实际操作的设备无关的设备无关4)文件管理的功能)文件管理的功能?文件存储空间的管理?目录管理?文件的操作返回本节返回本节30习题1.1(1)计算机硬件和软件的定义。(2)计算机的主要组件及它们的作用。(3)计算机中为什么只能使用0、1。(4)bit(比特,二进制位)、byte(字节)的概念。(5)内存的作用及特点;内存地址的概念。(6)外存的作用及特点。(7)存储器容量的几种计量单位。(8)指令及其执行
21、过程;程序及其执行过程。(9)机器语言、汇编语言、高级语言的特点。(10)什么叫源程序?什么叫编译器?(11)操作系统的特点及其主要任务。(12)存储器管理、处理机管理、设备管理、文件管理的功能。311.2 计算机中数据的表示计算机中数据的表示数据编码的概念数据编码的概念前面我们简单介绍了计算机中控制信息的表示前面我们简单介绍了计算机中控制信息的表示指令的编码。指令的编码。其实,在计算机中,任何信息都是以计算机能够识别的形式出现的。其实,在计算机中,任何信息都是以计算机能够识别的形式出现的。下面我们再来介绍数据信息在计算机中的表示。下面我们再来介绍数据信息在计算机中的表示。在计算机中,各种信息
22、都必须经过数字化编码在计算机中,各种信息都必须经过数字化编码转换成某种转换成某种二进制代码后才能被处理。因此,理解信息编码及其处理技术将是二进制代码后才能被处理。因此,理解信息编码及其处理技术将是至关重要的。至关重要的。编码:采用少量的基本符号并选用一定的组合原则编码:采用少量的基本符号并选用一定的组合原则(编码的两大要素),以表示大量复杂多样的信息。(编码的两大要素),以表示大量复杂多样的信息。编码在人类的生活中无所不在。编码在人类的生活中无所不在。例如,可以用例如,可以用1010个阿拉伯数码作为基本符号来组合表示任何数字;个阿拉伯数码作为基本符号来组合表示任何数字;又如,可以用又如,可以用
23、2626个英文字母作为基本符号来组合表示任何英语词汇。个英文字母作为基本符号来组合表示任何英语词汇。32二进制编码在计算机中,任何信息的编码所采用的基本符号都是二进制数码:0、1。究其原因:1)二进制数码在物理上最容易实现。如,电压的高低、脉冲的有无,都可以方便地用来表示0或1。2)用二进制数码表示数时,其编码以及运算规则都比较简单。3)二进制数码的0、1恰好与逻辑命题的两个值“是”/“否”、“真”/“假”相对应。使计算机便于实现逻辑运算。33(一)数值的编码计算机采用以2为“基数”的“进位计数制”。1.二进制数(Binary)如同十进制数256的大小是如下计算的那样“二进制计数制”:(1)只
24、有两个数码0和1;(2)逢2进1;(3)数中每位数字的大小等于该位上的数码乘以相应的“权”。一个二进制数11001011的大小也是“各位数码按权展开再相加”。127126025024123022+121120=12864008021=203 2102 5101 6100=2100 510 61=200+50+6=256二进制转换成十进制的方法342.十进制到二进制的转换除数商 余数2|30 0 低位2|1512|712|3 12|1 1高位0 说明:计算机中有一个数制转换程序:会自动将源程序中的十进制数转换成二进制数。下面是“二进制/十进制对照表”。采用“除2取余法”。其具体方法如下:把一个十
25、进制数不断除以2,记下余数;如此重复,直到商为0为止。最后将所得余数逆向排列便是对应的二进制值。例如,(30)10 的转换过程如左图,将余数按由高到低顺序排列,即得其结果:1111035二进制十进制001110211310041015110611171000810019.11111510000168位二进制数最多可以表示256个数(28个数);试问:9位、10位二进制数分别最多可以表示多少个数?二进制十进制.10000032.100000064.10000000128.11111111255363.八进制和十六进制的概念八进制及十六进制的出现,主要是为了方便二进制数的表示,因为,二进制数表示起
26、来比较冗长。(1)八进制(Octal)基数为8;有8个数码:0、1、2、3、4、5、6、7;逢8进1。一个八进制数 2307 的大小也是各位数码按权展开再相加。283 382 081 780=512 192 0 7=71137(2)十六进制(Hex)一个十六进制数 4AF 的大小也是各位数码按权展开再相加。41621016115160=1024 160 15=1199基数为16;16个数码:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F;进位规则:逢16进1。38(3)十进制到八进制的转换采用“除8取余法”。其具体方法如下:把一个十进制数不断除以8,记下余数;如此重复,直到商为
27、0为止。最后将所得余数逆向排列便是对应的八进制值。例如,(30)10 的转换过程如左图,将余数按由高到低顺序排列,即得其结果:36商余数8|308|3 6低位0 3 高位39(4)十进制到十六进制的转换采用“除16取余法”。其具体方法如下:把一个十进制数不断除以16,记下余数;如此重复,直到商为0为止。最后将所得余数逆向排列便是对应的十六进制值。例如,(30)10 的转换过程如左图,将余数按由高到低顺序排列,即得其结果:1E商余数16|3016|1 E(14)低位0 1 高位下面是“十进制/二进制/八进制/十六进制对照表”。40十进制二进制八进制十六进制00001111210223113341
28、0044510155611066711177810001089100111910101012A11101113B12110014C 十进制二进制八进制十六进制13110115D 14111016E 15111117F 16100002010 17100012111.3111111371F321000004020331000014121.63111111773F64100000010040.41(5)二进制到八进制的转换其具体方法是:将二进制数从低位到高位,每3位分成一组,最高位不足3位补0。然后,每一组用一个八进制数码表示。例如,(11001)2 的转换过程如下:(011,001)(3,1)(
29、31)8 其十进制数为25.(6)二进制到十六进制的转换其具体方法是:将二进制数从低位到高位,每4位分成一组,最高位不足4位补0。然后,每一组用一个十六进制数码表示。例如,(11001)2 的转换过程如下:(0001,1001)(1,9)(19)16 其十进制数为25.3位二进制数:000111最多只能表示1位八进制数:07因为:log28=34位二进制数:00001111最多只能表示1位十六进制数:0F因为:log216=442十进制二进制八进制十六进制000011112102231133.711177810001089100111910101012A.14111016E 15111117F
30、16100002010 二进制与八进制二进制与十六进制43(8)十六进制到二进制的转换其具体方法是:依次将一个十六进制数中的每1位用4位二进制数码表示之即可。例如,(1E)16 的转换过程如下:(1,E)(0001,1110)(00011110)(11110)2 其十进制为30.(7)八进制到二进制的转换其具体方法是:依次将一个八进制数中的每1位用3位二进制数码表示之即可。例如,(36)8的转换过程如下:(3,6)(011,110)(011110)(11110)2 其十进制为30.说明:八进制、十六进制只是人们为了便于表示二进制而使用的两种方式。与十进制一样,计算机并不认识它们!所以,系统内部
31、通常都会提供将二进制转换成八进制和十六进制的转换程序.44表示该数是一个正数表示该数是一个正数表示该数是一个负数表示该数是一个负数例如,例如,4.关于数值的符号关于数值的符号由于计算机中的任何信息都是用二进制(编码)来表示的。由于计算机中的任何信息都是用二进制(编码)来表示的。因此,在计算机内部,数值的符号(即,正号因此,在计算机内部,数值的符号(即,正号+、负号、负号-)也是用)也是用二进制来表示的。二进制来表示的。其方法是:其方法是:将每个二进制数的最高位规定为将每个二进制数的最高位规定为“符号位符号位”用于表示该用于表示该数值的符号:数值的符号:0表示正号表示正号;1表示负号。表示负号。
32、0高位高位低位低位1高位高位低位低位并采用一种被称为并采用一种被称为“补码补码”的编码规则,对带符号的整数的编码规则,对带符号的整数进行编码。进行编码。45在补码系统中,凡正整数,其符号位后面的编码就是该数的“原码”该数绝对值的二进制表示。例如,下面这个8位(一个字节)的补码表示的整数为:+127。然而,对于负整数,符号位后面的编码是该数的“补码”该数的“原码”取反后(“反码”)加1。例如,下面这个8位的补码表示的整数为:-1。0 1 1 1 1 1 1 1高位低位7 6 5 4 3 2 1 0提示:一个n位补码的整数,由于符号位占用了1位,因此,该整数的二进制有效位只有n-1位!11 1 1
33、 1 1 1 1高位低位7 6 5 4 3 2 1 0获取负数的n位编码(即补码)的步骤如下:i)获取原码取该负数绝对值的n位二进制值;ii)获取反码将上述原码中的各位取反;iii)获取补码将上述反码加1;46例如,-1的8位补码的获取过程如下:i)-1的绝对值是1,其8位二进制值是10000001(叫做“原码”);ii)10000001的“反码”是11111110;(取反时符号位不变!)iii)加1后得11111111(“补码”);获取负数n位编码的方法:i)获取原码取该负数绝对值的n位二进制值;ii)获取反码将上述原码取反;iii)获取补码将上述反码加1;再如,-36的8位补码的获取过程如
34、下:i)-36的绝对值是36,其8位二进制值是10100100(原码);ii)10100100的反码是11011011;iii)加1后得到补码是11011100;47对于由0开头的补码,其原值的获取过程很简单:将符号位后面的n-1位二进制直接转换为十进制,即得该数的原值!由补码获取原值的步骤:i)获取反码将其编码取反;ii)获取原码将上述反码加1;iii)如果其编码的符号位为1,则为负数。反之,一个n位补码的原值又是如何获取的呢?方法是:与获取补码的过程相反对补码取反、加1!下面以一个8位补码11101101为例,来观察其原值的获取过程:i)将其补码11101101取反,得反码:0001001
35、0;ii)将上述反码加1得其原码:00010011;由此可知,该补码的原值的绝对值为19。iii)由于该补码的符号位为1,因此,该数的原值是-19。48带符号整数的带符号整数的8 8位二进制编码位二进制编码十进制十进制000000000000000011000000102000000113000001004000001015000001106000001117000010008.011111111278 8位(一个字节)补码最多可以表示256个带符号整数个带符号整数:-128127带符号整数的带符号整数的8 8位二进制编码位二进制编码十进十进制制10000000-12810000001-127
36、10000010-126.11111110-211111111-14916位(两个字节)位(两个字节)补码最多可以表示65536个带符号整数:-3276832767带符号整数的带符号整数的16位二进制编码位二进制编码十进十进制制000000000000000000000000000000001100000000000000102.00000000000001004.00000000111111112550000000100000000256.010000000000000016384.011111111111111132767带符号整数的带符号整数的16位二进制编码位二进制编码十进制十进制10
37、00000000000000-327681000000000000001-32767.1111111111111110-21111111111111111-1505.关于数值的范围和溢出问题由于计算机是通过预先设计好的固定硬件来处理二进制数的,因此,它所能处理的二进制数的位数是有限的称为“有效位”或“数值范围”。通常计算机中采用的有效位有:8位(1个字节,其整数的有效数为|27-1|);16位(2个字节,其整数的有效数为|215-1|);32位(4个字节,其整数的有效数为|231-1|)等。由于整数都使用固定个数的位进行存储,所以,当一次整数运算产生的值超出了有效位时,将导致该值“溢出”。下面
38、以8位补码为例:01111111(+127)+00000011(+3)-10000010(-126)10001000(-120)+11101111(-17)-01110111(+119)同号相加的结果,若其符号位与两个加数的符号位不同,则为溢出!提醒:数据的溢出是悄悄发生的,计算机不进行运行时检查。预测数值的范围并为之分配合适的大小以免溢出,完全是程序员的责任!异号相加永不溢出!高位如有进位将被丢弃!51(二)非数值数据的编码非数值数据是指:字符(包括字母、数字、各种特殊符号)、逻辑值等数据。在这里,我们仅介绍字符、逻辑值的编码。1.逻辑值数据逻辑数据是指用于逻辑运算的数据。它们只有两个值:“
39、真”和“假”,或者“是”和“非”。它们的编码没有统一的规定,一般可由其应用环境来决定:最简单的方法,只使用一个二进制位(bit)来表示它们:0表示“真”;1表示“假”。但是,通常还是使用一个16或32个二进制位s来表示它们:0表示“真”;1表示“假”。例如,C、C+使用4个字节(32位)来表示它们;而Java语言则用2个字节(16位)来表示它们的。522.字符数据“字符”数据通常是指:用于文本(即文字)处理的数据。它们包括各种文字及标点符号。目前流行的字符编码有两种:ASCII码、Unicode 码。(1)ASCII码 概念这是一种称为“美国信息交换标准码”的用于英文字符的编码。这种编码共收集
40、了128种英文及标点符号字符(参见ASCII编码表)。它是一种采用7位二进制的编码(最多可表示 27=128种字符)。例如,1000001字符A的编码1000010字符B的编码1100001字符a的编码1100010字符b的编码53说明:说明:由于二进制数的表示由于二进制数的表示比较冗长,因此,在编比较冗长,因此,在编码表中通常使用十进制码表中通常使用十进制或十六进制等方式来表或十六进制等方式来表示之。示之。例如,字符例如,字符A其编码是其编码是1000001其十进制数为其十进制数为 65其八进制为其八进制为101其十六进制为其十六进制为 4154 具体实现由于ASCII编码表采用7位二进制编
41、码,所以在计算机中需要用一个字节(8位二进制)来保存。其中,最高位用于奇偶校验位(程序员不必理会它!)。例如,在一个字节中,字符A的编码是01000001(相当于十进制数为65、八进制为101、十六进制为41);字符B的编码是01000010(相当于十进制数为66、八进制为102、十六进制为42);常用字符(需要熟记)在ASCII编码表中,常用字符及其编码对应如下:空格00100000(其十进制值为32);数字字符0 9 0011000000111001(其十进制值为4857);大写英文字母AZ0100000101011010(其十进制值为6590);小写英文字母az0110000101111
42、010(其十进制值为97112);(大小写英文字母对应的编码相差32!这一点在以后编程时有用)提醒:ASCII码是一种用于英文字符集的编码,因此,它不能用于汉字!55(2)Unicode 编码Unicode 码(“统一码”),一种可以表示世界上所有书面语言中字符的编码。它被设计为16位编码(最多可以表示 65536个字符)。因此,在计算机中,它需要占用2个字节。为便于区别,其编码通常以%u 开头的4位十六进制数表示:?。例如,中文的“欢迎”两个字符的编码是,欢和迎。Unicode 码收录了ASCII码(用于表示128个英文及标点符号字符),其编码从?縰?(Unicode 编码表中的前128个字
43、符)。例如,英文字符“A”,其Unicode 码值则是 A,如下所示:0 0 1 0 0 0 1 00 1 10 10 116B22“欢”的Unicode 码0 10 0 0 0 0 10 0 00 00 0 0004156(3)汉字编码汉字在计算机中的编码问题,将涉及到三个编码:输入码、机内码和字形码。1)输入码利用标准键盘上的键(即,英文字母和数字等键)来进行汉字输入。这种由英文字母和数字组成的、用于汉字输入的编码方案被称为“汉字的输入码”。常用的汉字输入码有:拼音码:以汉语拼音字母为基础的编码。字形码:由汉语字形确定的编码。如,“五笔字形”等。形音码:字形与拼音的组合。如,“首尾码”。数
44、字码:由数字组成的汉字编码。如,“区位码”、“国标码”。57“区位码”:它将国家标准局公布的6763个汉字分成94个区(从1开始编号,称为“区码”),每个区又分成94个位(从1开始编号,称为“位码”)。“区码”和“位码”的顺序连接就是“区位码”。如,汉字“万”的“区位码”是45,82(2DH,52H),占2个字节。区位码可以如下所示:万位码 1 82 94区码1.45.94 58“国标码”:它是从“区位码”演变而来的:分别在“区码”和“位码”上各加是32,即加上20H。那么,“万”的“国标码”则是77,114(4DH,72H或4D72H)。0 0 1 0 1 1 0 1 0 1 0 1 0 0
45、 1 02 D 5 2例如,“万”的“区位码”是45,82(2DH,52H)。0 100 1 1 0 1 0 1 11 0 0 1 04D 72592)机内码无论你使用哪一种汉字输入码来输入汉字,然而,这些输入法最终都会将你所输入的汉字转换成一种统一的编码,然后再将它们存储到计算机的存储器中。这种统一的编码就是汉字的“机内码”。汉字的“机内码”与英文字符的“机内码”ASCII码(只需占用一个字节且最高位为0)的存储有所不同。汉字的“机内码”需要占用两个连续的字节来存储:第一个字节存放其“国标码”的高2位十六进制;第二个字节存放其“国标码”的低2位十六进制;并且将这两个字节的最高位都置“1”。提
46、醒:将汉字机内码中两个字节的最高位置1,以便于区别ASCII码!60由上可知,一个汉字的“机内码”需要占用两个字节:第一个字节存放“国标码”的高2位十六进制;第二个字节存放“国标码”的低2位十六进制;最后将这两个字节的最高位都置“1”。0 1 0 0 11 0 1011 1 0 0 1 04D 72例如,“万”字的国标码是4D72H,如下图所示:那么,它的机内码就是:CDF2H(4D72H+8080H)。11 0 0 11 0 1111 1 0 0 1 0CD F2这一位由这一位由0变161Unicode 与机内码的问题:Unicode 其实只是一个符号集,它只规定了符号的二进制代码,却没有规
47、定这个二进制代码应该如何存储。也就是说,它并非最终的机内码。它还需要操作系统将它转换为本地的机内码。通常,Unicode 中的一个英文标点符号的“机内码”都是采用一个由0开头的字节来存储;而一个汉字标点符号真正的“机内码”则因地区而不同:中国大陆使用GB2312编码(简体中文。如上所述,常称为“国标码”),而在台湾和香港则使用BIG5码(繁体中文)。因此,在不同地区的计算机之间,很可能不能识别对方所产生的包含汉字的数据文件。比方说,在台湾用java程序产生的包含汉字的文件,到大陆再用java程序打开它,很可能就是乱码!尽管如此,Unicode 还是被人们称为字符的“内码”。例如,“欢迎”两个字
48、的机内码是:BBB6、D3AD;而其Unicode 码则是:6B22、8FCE。623)字形码用于汉字输出(即,显示或打印)时表示汉字字形的字模数据。通常用点阵方式表示。一个汉字的“字形码”就是其字形点阵的代码。所有汉字字形码就构成了“汉字字库”。根据不同的要求,汉字字形有:1616、2424、3232等点阵方式。显然,点阵越大,字形就越清晰美观。然而,信息量就越大,所占内存也就越大。以1616 点阵为例。每个汉字就需要占用 32个字节,它们的十六进制编码为:(00,80),(00,80),(20,80),(10,80),(11,FE),(05,02),(09,44),(0A,48);(10,
49、40),(10,40),(60,A0),(20,A0),(21,10),(21,08),(22,04),(0C,03)。15870015634)各种编码之间的关系从上述几种汉字编码的作用出发,我们可以将这些汉字编码抽象为一个简单的结构模型。如下图所示:输入码国标码机内码字形码汉字输入汉字输出64习题1.21、数制转换(1)(213)D=()B=()O=()H(2)(127)D=()B=()O=()H(3)(3E1)H=()B=()D=()O(4)(FF)H=()B=()D=()O(5)(670)O=()B=()D=()H(6)(177)O=()B=()D=()H(7)(101101011010
50、11)B=()D=()O=()H(8)(11111111000011)B=()D=()O=()H652、字符A、a、0、9的ASCII编码值及Unicode 编码值分别是多少?3、若一个整数的8位编码为10100111,试问:其原值是多少?若它与另一个整数01111111相加,则其和的原值为多少、是否产生溢出?4、下面4个内存字节中保存有几个英文字符、几个汉字字符的机内码?5、上网检索“汉”、“字”的unicode 编码(用%uxxxx 表示)。0 0 1 0 1 1 0 1 1 1 0 1 0 0 1 010 1 0 1 1 0 1 0 1 0 1 0 0 1 066158700156、一个