计 算 基 础
学习目标
- 了解数制的概念。
- 掌握常用的数制转换方法。
- 熟悉信息在计算机内的表示和存储方法。
计算思维的根本归结为对各种类型的数据进行计算或处理。要想用计算机来处理现实世界的信息,就需要用一定的方式将信息转换为计算机可以存储和处理的数据。计算机用数据来表示信息,通过处理数据来实现对信息的处理。在计算机内部,所有形式的信息都需要转换为数据,以二进制形式来表示。本章将介绍数制的概念、信息在计算机中的表示,包括数值型信息和非数值型信息的表示。
2.1 数制
现实世界中的信息是有意义的,是各种事物的变化和特征的反映,又是事物之间相互作用和联系的表征。要想用计算机来处理现实世界的信息,就需要用一定的方式将信息转换为计算机可以存储和处理的数据。计算机用数据来表示信息,通过处理数据来实现对信息的处理。在计算机内部,所有的信息(程序、文字、图片、声音、视频等)都需要转换为数据的形式,并以二进制数据表示。二进制是数制的一种,计算机领域常用的数制还有八进制、十进制、十六进制。本节将通过介绍数制的概念,引入几种常用数制的表示方法。
2.1.1 数制的概念
数制是用一组固定的数字和一套统一的规则来表示数值的方法。按照进位方式记数的数制叫进位记数制。
在采用进位记数制的数字系统中,如果用R个基本符号(例如0,1,2,…,R-1)表示数值,则称其为R进制,R称为该数制的基。R进制数中可用的数字符号称为数码,R进制共有R个数码。数码在一个数中所在的位置称为数位。一个数的每个位置上所代表的数值大小称为位权,位权的大小是以基数为底、以数码所在位置(即数位)的序号为指数的整数次幂。整数部分最低位的位权是R0,次低位的位权为R1;小数点后第1位的位权为R-1,第2位的位权为R-2,依次类推。
各种常用数制以及它们的特点如表2-1所示。
表2-1 常用数制及特点
【例2-1】十进制数1234.56可以展开为:
(1234.56)D=1×103+2×102+3×101+4×100+5×10-1+6×10-2
其中,10为该数的基,1、2、3、4、5、6为数码,103、102、101、100、10-1、10-2为位权。
【例2-2】二进制数10101.101 可以展开为:
(10101.101)B=1×24+0×23+1×22+0×21+1×20+1×2-1+0×2-2+1×2-3=(21.625)D
其中,2为该数的基,1、0、1、0、1、1、0、1为数码,24、23、22、21、20、2-1、2-2、2-3为位权。
【例2-3】八进制数237.4 可以展开为:
(237.4)O=2×82+3×81+7×80+4×8-1=(159.5)D
其中,8为该数的基,2、3、7、4为数码,82、81、80、8-1为位权。
【例2-4】十六进制数3FB9.D 可以展开为:
(3FB9.D)H=3×163+15×162+11×161+9×160+12×16-1=(16313.75)D
其中,16为该数的基,3、F、B、9、D为数码,163、162、161、160、16-1为位权。
德国数学家莱布尼茨(Leibniz)发明的二进制是对人类的一大贡献。二进制是计算技术中广泛采用的一种数制,计算机中数据的存储和处理均采用二进制,主要原因如下。
1.电路简单
计算机是由逻辑电路组成的,逻辑电路通常只有两种状态,例如开关的接通与断开、晶体管的饱和与截止、电压电平的高与低等,这两种状态正好用数码0和1来表示。
2.工作可靠
代表两种状态只需要两个数码,数码数量少,在数字传输和处理中不容易出错,因而电路更加稳定可靠。
3.简化运算
二进制数的运算法则少、运算简单,因此计算机运算器的硬件结构大大简化。譬如,十进制数码有10个,乘法运算法则有55种,而由两位数码组成的二进制,其乘法只有3种运算法则。
4.逻辑性强
由于二进制0和1正好与逻辑代数的假和真相对应,有逻辑代数的理论基础,因此用二进制数表示二值逻辑很自然。
二进制数一般比较长,而且容易写错,为了便于书写和记忆,除了二进制外,人们还经常采用八进制和十六进制表示数据。十进制、二进制、八进制和十六进制数之间的对应关系如表2-2所示。
表2-2 十进制、二进制、八进制和十六进制数之间的对应关系
2.1.2 数制的转换
常用的数制转换包括其他进制转换为十进制,十进制转换为其他进制,二进制、八进制、十六进制的相互转换。
1. 非十进制转换为十进制
将非十进制数按权展开求和,各个数码与相应位权相乘以后再相加即为对应的十进制数。
【例2-5】将二进制数10011.101、八进制数504.1、十六进制数18D.6转换为十进制数。
解:(10011.101)B=1×24+0×23+0×22+1×21+1×20+1×2-1+0×2-2+1×2-3
=16+2+1+0.5+0.125=(19.625)D
(504.1)O=5×82+0×81+4×80+1×8-1=320+4+0.125=(324.125)D
(18D.6)H=1×162+8×161+13×160+6×16-1=256+128+13+0.375=(397.375)D
2. 十进制转换为非十进制
将十进制转换为其他进制时,整数部分和小数部分分别遵循不同的转换规则。将十进制数转换为R进制数的过程如下:
- 整数部分:除以R取余法,即整数部分不断除以R取余数,直到商为0为止,最先得到的余数为最低位,最后得到的余数为最高位。
- 小数部分:乘R取整法,即小数部分不断乘以R取整数,直到乘积为0或达到有效精度为止,最先得到的整数为最高位(最靠近小数点),最后得到的整数为最低位。
转换规则可简记为:以小数为基准,整数部分除以R取余,直到商为0,所得余数从右往左依次排列;小数部分乘R取整,直到小数为0或达到有效精度为止,所得整数从左至右依次排列。
需要注意的是,有的十进制小数不能精确转换为相应的非十进制小数,即出现“乘不
尽”现象,此时可根据转换精度要求保留一定的小数位数。
【例2-6】将(183.625)D分别转换成二进制、八进制和十六进制数。
解:若十进制数既有小数部分,又有整数部分,则将它们分别转换后再合起来。
整数(183)D转换成其他R进制的方法,除以R取余:
整数部分转换结果为(183)D=(10110111)B=(267)O=(B7)H。
小数(0.625)D转换成R进制的方法,乘R取整:
小数部分转换结果为(0.625)D=(0.101)B=(0.5)O=(0.A)H。
所以,最终转换结果为(183.625)D= (10110111.101)B=(267.5)O=(B7.A)H。
3. 八进制、十六进制转换为二进制
由23=8和24=16可以看出,每位八进制数可用3位二进制数表示,每位十六进制数可用4位二进制数表示。所以,将八进制或十六进制转换为二进制时,只要将八进制数或十六进制数的每一位表示为3位或4位二进制数,去掉整数首部的0或小数尾部的0即可得到二进制数。
【例2-7】将(372.531)O和(19A76.78)H转换为二进制数。
解:(372.531)O=(011 111 010. 101 011 001)B=(11 111 010. 101 011 001)B
(19A76.78)H=(0001 1001 1010 0111 0110. 0111 1000)B
=(1 1001 1010 0111 0110. 0111 1)B
4.二进制转换为八进制、十六进制
同理,二进制转换为八进制或十六进制时,需要以小数点为中心,分别向左、右每3位或4位分成一组,不足3位或4位的,整数部分在左边补零,小数部分在右边补零。然后,将每组数用一位对应的八进制数或十六进制数代替即可。
【例2-8】将(11011011110111.110001)B转换为八进制数和十六进制数。
解:当由二进制数转换成八进制数或十六进制数时,只需要把二进制数按照3位一组或4位一组转换成八进制数或十六进制数即可。转换结果为:
(011 011 011 110 111.110 001)B=(33367. 61)O
(0011 0110 1111 0111.1100 0100)B = (36F7.C4 )H
2.2 数据的存储
在计算机中利用二进制进行数组的组织和计算。
2.2.1 数据的组织形式
常用的存储容量单位有字节、千字节、兆字节等。存储单元的地址直接用二进制进行标识。
1. 位
计算机中所有的数据都是以二进制来表示的,一个二进制代码称为一位,记为bit(读作比特)。位是计算机中最小的信息单位,计算机中最直接、最基本的操作就是对二进制位的操作。
2. 字节
在对二进制数据进行存储时,以8位二进制代码为一个单元存放在一起,称为一个字节(Byte),它是衡量存储器大小的单位,记为B。
位是计算机中最小的数据单位,字节是计算机中的基本信息单位。
3. 字和字长
CPU能一次并行处理的一组二进制数称为字,这组二进制数的位数就是字长。一个字由若干个字节组成,不同计算机系统的字长是不同的,早期的微机字长一般是8位和16位,386以及更高的处理器大多是32位,目前的计算机处理器大部分已达到64位。一次能并行处理字长为8位数据的CPU通常就叫8位CPU,一次能并行处理字长为64位数据的CPU称为64位CPU。
4. 容量单位
计算机存储器的容量常用B、KB、MB、GB和TB来表示,它们之间的换算关系如下:
1 B=8 bit
1 KB=1024 B=210 B K读“千”
1 MB=1024 KB=210 KB=220 B M读“兆”
1 GB=1024 MB=210 MB=230 B G读“吉”
1 TB=1024 GB=210 GB=240 B T读“太”
继TB之后,还有PB、EB、ZB、YB等存储容量单位。
5.地址
在计算机存储器中,每个存储单元必须有唯一的编号,称之为地址。通过地址可以定位存储单元,进行数据的查找、读取或存入。
2.2.2 计算机中数据的运算
计算机中的数据运算主要包括算术运算和逻辑运算。参与运算的数据均由0和1构成。算术运算有加、减、乘、除4种;基本逻辑运算有与、或、非3种。
1.算术运算
(1)二进制加法
运算规则:0+0=0;0+1=1;1+0=1;1+1=0 (进位,逢二进一)。
例如:
(2)二进制减法
运算规则:0-0=0;1-0=1;1-1=0;0-1=1(借位)。
例如:
(3)二进制乘法
运算规则:0×0=0;1×0=0;0×1=0;1×1=1。
(4)二进制除法
二进制的除法运算规则和十进制除法类似。
2.逻辑运算
英国数学家乔治·布尔(George Boole)用数学方法研究逻辑问题,成功地建立了逻辑运算。他用等式表示判断,把推理转换成等式的变换。这种变换的有效性不依赖人们对符号的解释,只依赖于符号的组合规律。这一逻辑理论称为布尔代数。计算机工作时要处理很多逻辑关系的运算,逻辑关系是0和1的二值关系。计算机中使用了能够实现各种逻辑运算功能的电路,利用逻辑代数的规则进行各种逻辑判断。逻辑运算的结果只有“真”或“假”两个值,通常用“1”代表“真”,用“0”代表“假”。
常用的逻辑运算符号有“与”“或”“非”“异或”等。
(1)与运算
与运算又称逻辑乘,用符号“×”“?∧?”或AND表示。
运算规则:0×1=0;1×0=0;0×0=0;1×1=1。
设A、B为逻辑型变量,只有当A、B同时为真时,与运算的结果才为真,否则为假。图2-1的电路图解释了逻辑与运算的运算规则。假设开关A或B闭合代表逻辑值1,开关断开代表逻辑值0,灯泡亮代表逻辑值1,不亮代表逻辑值0,则灯泡与开关A、B的关系就体现了逻辑与的关系。
图2-1 逻辑与的电路示意图
逻辑与运算的真值表如表2-3所示。真值表是指把表达式中变量的各种可能取值一一列举出来,求出对应表达式值的列表。
表2-3 逻辑与运算真值表
(2)或运算
或运算又称逻辑加,用符号“+”“?∨?”或OR表示。
运算规则:0+0=0;0+1=1;1+0=1;1+1=1。
设A、B为逻辑型变量,只要A、B之一为真时,或运算的结果就为真,否则为假。图2-2的并联电路体现了灯泡与开关A、B之间的关系是逻辑或的关系。逻辑或运算的真值表如表2-4所示。
图2-1 逻辑或的电路示意图
表2-4 逻辑或运算真值表
(3)非运算
非运算又称逻辑非,一般在变量上加横线或在变量前加NOT表示非运算。
运算规则:。
图2-3所示电路体现了灯泡与开关A之间是逻辑非的关系。逻辑非运算的真值表如表2-5所示。
图2-3 逻辑非的电路示意图
表2-5 逻辑非运算真值表
(4)异或运算
除以上的与、或、非运算外,异或运算也是常见的逻辑运算,运算符为“⊕”,有时也用XOR表示。逻辑表达式为F=A⊕B,A和B相异结果为真。A与B异或的关系如表2-6所示。
表2-6 异或真值表
以上逻辑运算符的运算优先级依次为非、与、异或、或。
【例2-9】计算1 AND 0 OR 1 AND NOT 0的结果。
解:1 AND 0 OR 1 AND NOT 0 = 0 OR 1= True (1)
关系运算的结果是逻辑值,可以用来进行逻辑运算。
【例2-10】计算NOT (4<6) OR (2*4<9) AND 0 XOR 5>6的结果。
解:NOT (4<6) OR (2*4<9) AND 0 XOR 5>6=0 OR 1 AND 0 XOR 0 = True (1)
2.3 数据在计算机中的表示形式
2.3.1 计算机中数值型数据的表示
信息是以数据的形式存储和处理的。数据的类型有很多种,例如数字、文字、表格、声音、图形和图像等。计算机不能直接处理这些数据类型,必须将这些数据以规定的二进制形式表示后才能加以处理,这些规定的二进制形式就是数据的编码。编码时需要考虑数据的特性和是否便于计算机存储和处理。下面介绍几种常用的数据编码。
计算机的数据包括数值型和非数值型两大类。数值型数据可以进行算术运算,非数值型数据不能进行算术运算。
1.数值型数据
(1)数的符号
数据有正有负,通常在计算机中规定用一个符号表示数的正负,即用“0”表示“正”,用“1”表示“负”。一般把计算机内部将正负符号数字化后得到的数称为机器数,把计算机外部用“+”和“-”符号表示正负的数称为真值。机器数有两个特点:一是符号数字化,二是数的大小受机器字长的限制。
例如,假设计算机字长为8位,十进制真值-100的二进制真值形式为-1100100,机器数为11100100。-100的机器数形式如下所示:
其中,左侧的最高位“1”为数符,即符号位。
(2)定点数和浮点数
计算机处理的数值数据很多带有小数,带小数点的数据在计算机中通常有两种表示方法:一种是定点表示法,简称定点数;另一种小数点位置可以浮动,称为浮点表示法,简称浮点数。在数学上,小数点一般用“.”来表示。在计算机中,小数点的表示采用人工约定的方法来实现,即约定小数点的位置,这样可以节省存储空间。
- 定点数:在定点数的表示方法中,约定所有数值数据的小数点隐含在某一个固定位置上。定点数分为定点整数和定点小数两种。
将小数点固定在最后一位数字之后的数称为定点整数。小数点并不真正占据一个二进制位,而是默认在最低位的右边。定点整数分为无符号整数和有符号整数。无符号整数的数码全部都是数值位,不能表示负数。有符号整数的最高位表示符号,其他位是数值位。字长为n的有符号数可以表示的绝对值最大的负数为-2n,此时,数的最高位为1,它既表示符号位,也表示数值位。
表2-7中给出了8位、16位、32位、64位字长的计算机所能表示的无符号整数和有符号整数的范围。
表2-7 字长不同的数的表示范围
当小数点的位置固定在符号位和最高数值位之间时,称为定点小数。定点小数表示一个纯小数。
例如,若机器字长为8位,数值11110000表示的十进制数为-0.875。小数点隐含在从左侧数第一个“1”(符号位)和第二个“1”(数值位的最高位)之间,可以假想为1.1110000。
- 浮点数:用定点法所能表示的数值范围非常有限,在做定点运算时,计算结果很容易超出字长的表示范围,不能满足实际问题的需要。所以当数据很大或很小时,通常用浮点数来表示。
浮点表示法与科学记数法类似,十进制的指数表示一般形式是p=m×10n,p为十进制数值,m为尾数,n为指数,10为基数。为了使浮点保持更高的精度以及有统一的表示形式,规定将浮点数写成规格化的形式,即十进制数的尾数绝对值的范围在 [0.1,1)之间,这样便准确规定了小数点的位置。例如,+0.000215的科学记数法的规格化形式只有一种,即
类似地,计算机中二进制数的浮点表示法主要包括尾数部分和阶码部分。这两部分分别用定点小数和定点整数表示。尾数部分包括数符和尾数,阶码部分包括阶符和阶码。浮点数的存储形式如下:
其中,数符和阶符各占1位,阶码的位数对应数的大小范围,尾数的位数对应数的精度。
规格化的二进制浮点数的尾数绝对值范围是[0.1,1),对应的十进制范围为 [1/2,1)。假定1个浮点数用2字节来表示,设阶符和数符各占1位,阶码占4位,尾数占10位。十进制数-6.75在计算机内的表示形式做如下转换:
在计算机内的表示形式如下:
浮点数的运算精度和表示范围都远远大于定点数,但在运算规则上,定点数比浮点数简单,容易实现。因此,计算机中一般都同时具有这两种表示方法。
(3)原码、反码、补码
一个二进制数同时包含符号和数值两部分,将符号也数值化的数据称为机器数。在计算机中机器数的表示方法很多,常用的有原码、反码和补码3种形式。原码表示法简单易懂,但由于原码表示的数在运算时常要进行一些判断,从而增加了运算的复杂性,故引入了反码和补码。
- 原码表示法:原码表示法是一种简单的机器数表示法,即用最高位表示符号,其余位表示数值。设x为真值,则[x]原为x的原码。
- 反码表示法:正数的反码与原码相同;负数的反码只需在原码的基础上把符号位以外的各位数按位“求反”(0变1,1变0)即可。用[x]反表示x的反码。
- 补码表示法:正数的补码与原码相同;负数的补码是在原码的基础上符号位不变,数值各位取反(0变1,1变0),然后最低位加1。用[x]补表示x的反码。
从上面关于原码、反码、补码的定义可知:一个正数的原码、反码、补码的表示形式相同,符号位为0,数值位是真值本身;一个负数的原码、反码、补码的符号位都为1,数值位原码是真值本身,反码是各位取反,补码是各位取反后最低位再加1。真值正0和负0的原码和反码表示不唯一,而补码表示是唯一的。
【例2-11】已知x1=+1100110,x2=-1100111,求x1和x2的原码、反码和补码。
解:根据原码和反码、补码的转换规则,可知正数的原码和反码、补码一致。即
[x1]原=[x1]反=[x1]补=01100110
根据负数的转换规则,[x2]原=11100111,[x2]反=10011000,[x2]补=10011001。
除原码、反码和补码外,还可以用移码表示机器数。无论正负数,直接对其补码的符号位取反,即可得到数的移码。浮点数的阶码通常用移码表示。移码可用于简化浮点数的乘除法运算。利用移码便于判断浮点数阶码的大小。
2.十进制数的编码—BCD码
人们习惯用十进制来记数,而计算机中采用的是二进制数。用4位二进制数来表示1位十进制数中的0~9这10个数码的编码称为BCD码。BCD码使二进制和十进制之间的转换可以快捷地进行。相对于一般的浮点记数法,采用BCD码,既可保存数值的精确度,又可避免计算机做浮点运算所耗费的时间。此外,对于其他需要高精确度的计算,也经常使用BCD编码。常见的BCD码有8421码、5421码和2421码等。在8421码中,每4位二进制数为一组,组内每个位置上的位权从左至右分别为8、4、2、1。以十进制数0~15为例,它们的8421 BCD编码对应关系如表2-8所示。
表2-8 十进制数与BCD码的关系
2.3.2 计算机中西文字符的表示
在使用计算机进行信息处理时,西文字符型数据是非常普遍的。西文字符包括各种字母、数字与符号等,它们在计算机中也需要用二进制进行统一编码。ASCII码(American Standard Code for Information Interchange,美国标准信息交换码)是一种常用的西文字符标准码,被国际标准化组织(ISO)定为国际标准。
ASCII码有7位ASCII码和8位ASCII码两种。7位ASCII码称为基本ASCII码,是国际通用的ASCII码。用1个字节表示7位ASCII码时,最高位为0,故7位二进制数可表示128个字符,它的范围为00000000B~01111111B。其中,包括52个英文字母(大、小写各26个)、0~9这10个数字及一些常用符号,如表2-9所示。
表2-9 ASCII码表
8位ASCII码称为扩充ASCII码,是8位二进制字符编码,其最高位有些为0,有些为1,范围为00000000B~11111111B,因此可以表示256种不同的字符。其中,00000000B~01111111B为基本部分,对应十进制数的范围为0~127,共计128种;10000000B~11111111B为扩充部分,范围为128~255,也有128种。尽管美国国家标准信息学会对扩充部分的ASCII码已给出定义,但在实际应用中多数国家都将ASCII码扩充部分规定为自己国家语言的字符代码,如中国把扩充ASCII码作为汉字的机内码。
关于ASCII码有以下几点说明:
1)通常一个ASCII字符占用1个字节(8 bit),最高位为“0”。
2)标准的7位ASCII码字符分为两类:一类是可显示的打印字符,共有95个;另一类是控制字符或通信专用字符,包括0~31及127,共33个。
3)数字字符0~9的ASCII码是连续的,为30H~39H;ASCII码字符是区分大小写的,大写字母A~Z和小写字母a~z的ASCII码也是连续的,分别为41H~5AH和61H~7AH。例如,大写字母A的ASCII码为1000001B,即ASC(A)=65;小写字母a的ASCII码为1100001B,即ASC(a)=97。可推得ASC(C)=67,ASC(c)=99。
2.3.3 计算机中中文字符的表示
西文字母数量少,在计算机的键盘上都有对应的输入按键。计算机内部存储和处理西文字母一般采用ASCII码就可以完成。汉字数量庞大,而且汉字字形、字体复杂多变,使用计算机对汉字进行处理就要复杂得多。汉字的输入要采用输入码;在计算机中存放和处理要使用机内码;输出时需要用对应的字形码进行显示和打印。即在汉字处理过程中需要经过多种编码的转换,下面分别介绍与汉字相关的编码。
(1)汉字输入码
按标准键盘上按键的不同排列组合对汉字进行编码,称为汉字的输入码。汉字输入码也称外码,是为将汉字输入计算机设计的代码。汉字是一种拼音、象形和会意文字,本身具有十分丰富的音、形、义等内涵。迄今为止,已有好几百种汉字输入码的编码方案问世,其中已经得到广泛使用的也达几十种之多。选择不同的输入码方案,则输入的方法及按键次数、输入速度均有所不同。按照汉字输入的编码元素取材的不同,可将众多的汉字输入码分为如下4类:
区位码:我国国家标准局颁布的《信息交换用汉字编码字符集——基本集》(GB2312—1980)对6763个汉字和682个图形字符进行了编码,给出了几种汉字编码标准。其中区位码将汉字和图形符号排列在一个94行94列的二维代码表中,每个汉字用两个字节表示,前(高)字节的编码称为区码,后(低)字节的编码称为位码。使用区位码进行输入时,需要敲入汉字的区位和位号,如“大”字在二维代码表中处于20区第83位,区位码即为2083。区位码的汉字编码无重码,向内部码转换方便。但若想记住全部区位码相当困难,所以区位码常用于录入特殊符号,如制表符、希腊字母等,或者输入发音、字形不规则的汉字、生僻字。
- 音码:音码是根据汉字的发音来确定汉字的编码方法,其特点是简单易学,但重码太多,输入速度较慢。常用的音码输入法有全拼输入法和双拼输入法。
- 形码:形码是根据汉字的字形结构来确定汉字的编码方法,其特点是重码较少,输入速度较快,但记忆量较大,熟练掌握较困难,记忆量较大。著名的形码输入法是五笔字型输入法,它是我国的王永明教授在1983年发明的。五笔是目前中国以及一些东南亚国家,如新加坡、马来西亚等最常用的汉字输入法之一。20世纪末,随着音码输入法的流行,使用五笔的人数急剧下降。
- 音形码:音形码是既根据汉字的发音又根据汉字的字形来确定汉字的编码方法,其特点是编码规则简单,重码少,缺点是难记忆。例如,自然码输入法就是一种音形结合的汉字输入方法。
(2)国标码
国家标准GB 2312—1980中的汉字代码除了十进制形式的区位码外,还有一种十六进制形式的编码,称为国标码。国标码是在不同汉字信息系统间进行汉字交换时所使用的编码。国标码并不等于区位码,它是由区位码转换得到的。将区位码转换成国标码的方法是:先将十进制区码和位码转换为十六进制的区码和位码,再将这个代码的高、低两个字节分别加上20H(十进制的32),就得到国标码。例如,“大”的区位码为2083,2083的二进制为0001010001010011B,十六进制形式为1453H。将1453的两个字节分别加上20H后,得到的3473H,即为“大”的国标码。
(3)机内码
虽然国标码是汉字信息交换的标准编码,但因其前后字节的最高位为0,与ASCII码发生冲突,会出现二义性,所以计算机内部不能使用国标码。将国标码进行转换,得到机内码。机内码是供计算机系统内部进行存储、加工处理、传输统一使用的代码。国标码转换为机内码的方法是:将国标码两个字节的最高位由0改1,其余7位不变,即国标码的每个字节都加上80H(128)。
如“大”字的国标码为3473H,其机内码为B4F3H。在Office办公软件中选择“插入”|“符号”命令,打开“符号”对话框,找到“大”字,可以看到“大”字的机内码对应的十六进制字符代码为B4F3H,如图2-4所示。
图2-4 “大”字的机内码
机内码表示简单,解决了中西文机内码存在二义性的问题。除机内码外,还有如GBK、UCS、BIG5、Unicode等多种编码方案。其中,Unicode码又称万国码或统一码,也是一个国际编码标准,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode码在当前的网络、Windows系统和许多大型软件中得到了广泛的应用。
(4)汉字的字形码
汉字字形码是汉字字库中存储的汉字字形的数字化信息,用于汉字的显示和打印。常用的输出设备是显示器与打印机。汉字字形码通常用点阵、矢量函数等方式表示。常用的字形点阵有16×16点阵、24×24点阵、48×48点阵、96×96点阵、128×128点阵、256×256点阵。不同的字体有不同的字库,如黑体、仿宋体、楷体等。点阵的点数越多,字的表达质量也越高、越美观,但占用的存储空间也就越大。以“大”的16×16点阵为例(见图2-5a),每个点位用一位二进制表示,1表示有点,0表示没有点,则每行需用16个点,即2字节,共16行,则占用32字节。因此,所有汉字的字模点阵构成“字库”。字库中存储了每个汉字的点阵代码,当显示输出时才检索字库,根据字模点阵输出字形。
(5)汉字处理流程
通过输入设备将汉字外码送入计算机,再由汉字系统将其转换成内码存储、传送和处理,当需要输出时,再由汉字系统调用字库中汉字的字形码得到结果,整个过程如图2-5b所示。
图2-5 “大”字点阵和汉字处理流程
2.3.4 声、图信息的表示
除数值、字符外,计算机还需要处理声音、图形、视频等信息,这些信息也需要转换成二进制数后计算机才能存储和处理。
1.声音的表示
声音信息包括话语、音乐以及自然界发出的各种声音。声音通常用模拟波的方式表示,振幅反映声音的音量,频率反映声音的音调。音频是连续变化的模拟信号,而计算机只能处理数字信号,要使计算机能处理音频信号,必须把模拟音频信号转换成用“0”“1”表示的数字信号,这就是音频的数字化。声音信息的数字化需要经过采样、量化、编码等过程。
(1)采样
对声音的采样,就是每隔一定时间间隔(称为采样周期)在模拟声音波形上取一个幅度值(电压值),采样的对象是通过话筒等装置转换后得到的模拟电信号。采样频率越高,用采样数据表示的声音就越接近于原始波形,数字化音频的质量也就越高。根据奈奎斯特采样定理,在采集模拟信号时,选用该信号所含最高频率两倍的频率采样,才可基本保证原信号的质量。人耳所能听到的频率范围为20 Hz~20 kHz,在实际采样中,采用44.1 kHz作为高质量声音的采样频率。
(2)量化
把采样得到的模拟电压值用所属区域对应的数字来表示,就称为对声音的量化。用来量化样本值的二进制位数称为量化位数。量化位数越多,所得到的量化值就越接近于原始波形的采样值。常见的量化位数有8位、16位、24位等。
(3)编码
编码是把量化后的数据用二进制数据形式表示。用一组0和1数字表示的声音,称为数字音频。编码之后得到的数字音频数据是以文件的形式保存在计算机中的。图2-6是声音采样、量化、编码过程示意图。图中以tA、tB和tC时刻采样的3个点A、B、C为例,给出其编码形式和对应幅值。该例采用3位量化位数。
图2-6 声音信号的编码
决定数字音频质量的主要因素是采样频率、量化位数和声道数。采样频率越高,数字音频的质量越好;量化位数越多,数字音频的质量越好;双声道(立体声)的声音质量要好于单声道。相应地,信息的存储量也随之增加。
记录每秒存储声音容量的公式为:
采样频率×采样精度(位数)×声道数÷8 =字节数
例如,用44.10 kHz的采样频率,每个采样点用16位的精度存储,录制10 s的立体声节目,则其WAV格式文件所需的存储量为:
44 100×16×2×10÷8=1 764 000(B)≈ 1.68 MB
在声音质量要求不高时,降低采样频率、采样精度的位数或利用单声道来录制声音,可减小声音文件的容量。
2.图像的表示
矢量图形文件存储的是生成图形的指令,因此不必对图形中的每个点进行数字化处理。
现实中的图像是一种模拟信号。图像的数字化涉及对图像的采样、量化和编码等。
(1)采样
对图像的采样,就是把时间上和空间上连续的图像转换成离散点的过程。图像采样的实质是用若干个像素点来描述一幅图像。在一定的面积上采样的点数(像素数)称为图像的“分辨率”,用点的“行数×列数”表示。分辨率越高,图像质量越好,容量也越大。
(2)量化
对图像的量化,是在图像离散化后将表示图像色彩浓淡的连续变化值离散成整数值的过程。在多媒体计算机系统中,图像的颜色用若干位二进制数表示,称为图像的颜色深度或亮度。常用的二进制位数有8位、16位、24位、32位。
在计算机中,常用以下类型的图像文件。
- 黑白图:图像的颜色深度为1位,即用一个二进制位1和0表示纯白、纯黑两种情况。
- 灰度图:图像的颜色深度为8位,占一个字节,灰度级别为256级。通过调整黑白两色的程度(称颜色灰度)可以有效地显示单色图像。
- RGB 24位真彩色:彩色图像显示时,由红、绿、蓝三基色通过不同的强度混合而成,当强度分成256级(值为0~255)时,占24位,就构成了224=16 777 216种颜色的“真彩色”图像。
无论从采样还是量化来讲,形成的数字化图像必然会丢掉一些数据,与模拟图像有一定的差距。但这个差距可以控制得非常小,以至人的肉眼难以分辨,此时,人们可以将数字化图像等同于模拟图像。
(3)编码
图像的分辨率和像素点的颜色深度决定了图像文件的大小,计算公式为:
行数×列数×颜色深度÷8 =字节数
例如,当要表示一个分辨率为640×480像素的24位真彩色图像时,需要的存储空间为640×480×24÷8B≈1MB。
由此可见,数字化后的图像数据量十分巨大,必须采用编码技术来压缩信息。编码是图像传输与存储的关键。
数据压缩通过编码的技术来降低数据存储时所需的空间,当需要使用压缩文件时,再进行解压缩。根据压缩后的数据解压缩后是否能准确恢复到压缩前的数据进行分类,可将数据压缩技术分为无损压缩和有损压缩两类。
无损压缩由于能确保解压后的数据不失真,一般用于文本数据、程序以及重要图片和图像的压缩。无损压缩比一般为2∶1~5∶1,因此不适合实时处理图像、视频和音频数据。典型的无损压缩软件有WinZip、WinRAR等。
有损压缩方法是以牺牲某些信息(这部分信息基本不影响对原始数据的理解)为代价,换取了较高的压缩比。有损压缩具有不可恢复性,也就是还原后的数据与原始数据存在差异,一般用于图像、视频和音频数据的压缩,压缩比高达几十到几百倍。例如,在位图图像存储形式的数据中,像素与像素之间无论是列方向还是行方向都具有很大的相关性,因此数据的冗余度很大,这就允许在人的视觉、听觉允许的误差范围内对图像进行大量的压缩。20世纪80年代,国际标准化组织(ISO)和国际电信联盟(ITU)联合成立了两个专家组—联合图像专家组(Joint Photographic Experts Group,JPEG)和运动图像专家组(Moving Picture Experts Group,MPEG),分别制定了静态和动态图像压缩的工业标准。目前主要有JPEG和MPEG两种类型的标准。
习题
一、简答题
- 简述计算机内部利用二进制编码的优点。
- 什么是ASCII码?
- 试从ASCII码表中查出字符*、!、E、5的ASCII码。
- 浮点数在计算机中是如何表示的?
- 如汉字“中”的区位码是5448,它的国标码和机内码是什么,是如何转换的?
- 简述将声音存入计算机的过程。
二、填空题
- 计算机在处理数据时,一次存取、加工和传送的数据长度是指 。
- 在计算机中,表示信息数据的最小单位是 。
- 是指用一组固定的数字和一套统一的规则来表示数目的方法。
- 国际通用的ASCII码是7位编码,而计算机内部一个ASCII码字符用1字节来存储,其最高位为 ,其低7位为ASCII码值。
- 在微型机汉字系统中,一个汉字的机内码占的字节数为 。
- 将二进制转换为八进制或十六进制时, 位二进制数对应一个八进制数, 位二进制数对应一个十六进制数。
- 在国标码(GB 2312—1980)中总共规定了 个汉字的编码。
- 汉字“华”的机内码是BBAAH,那么它的国标码是 。
- 在计算机中表示数值时,小数点位置固定的数称为 。
- 二进制数01000111代表ASCII码字符集中的 字符。
- 机器数有 、 和 3种类型。
- (10001000)B=( )D=( )H。
- (0.110101)B=( )O=( )H。
- (27.2)O=( )D=( )B。
- (19.8)H=( )B=( )D。
- (1012)D=( )B=( )O。
- (10110010.1011)B=( )O=( )H。
- ( 35.4)O=( )B=( )D=( )H=( )8421。
- (39.75 )D=( )B=( )O=( )H。
- ( 5E.C)H=( )B=( )O=( )D=( )8421。
- ( 0111 1000)8421 =( )B=( )O=( )D=( )H。
- 二进制数-10110的原码为 ,反码为 ,补码为 。