大学计算机应用基础
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第三节 信息的表示与存储

一、数据、信息和媒体

在计算机和信息处理的领域,数据和信息及信息的载体(即媒体)是经常涉及的概念,它们往往有特定的内涵,下面作一些简单的介绍。

(一)数 据

数据(data)是表达和传播信息的载体或工具。它可以是文字符号、图形图像、声音或其他形式。国际标准化组织(ISO)就对数据下了一个定义:“数据是对事实、概念或指令的一种特殊表达形式,而这种特殊表达形式可以用人工的方式或自动化的装置进行通信、翻译转换或者进行加工处理。”这个定义中,首先强调的是数据表达了一定的内容,即“事实、概念或指令”;同时指出数据是“特殊表达形式”,它不仅能由人工(低效率地)去加工处理,而且这种“特殊表达形式”更适合用自动化装置(特别是计算机系统)去高效率地加工处理、通信传递以及翻译转换。

从实际使用来看,数据分为“数值数据”和“非数值数据”两类。“数值数据”是指具有“量”的概念的数据,它常常带有量词,可比较大小。而“非数值数据”是指具有“陈述”意义的数据,它常常是对对象的一种“描述”或“表达”。数据在人类世界中是丰富多彩的,但在机器世界中却只有“0”和“1”的排列。

(二)信 息

信息与数据这两个概念很难严格区分。我们可以通俗地认为,信息是对人们有用的数据,而这些数据可能影响到人们的行为与决策。数据是客观存在的事实、概念或指令的一种可加工的特殊表达形式,而信息强调的是对人类有用的数据。例如明天的天气预报对明天要出门的人来说是“信息”,而对于要待在家中的人来讲只是“数据”而已。

计算机的信息处理实质上就是由计算机进行数据处理的过程,也就是说,通过对数据的采集,有效地把数据组织到计算机中,由计算机系统对数据进行相应的转换、合并、分类、加工、计算、统计、汇总、存储、传递等操作,经过对数据的处理(加工),向人们提供有用的信息,这样的过程就是信息处理。

因此可以简单地说,信息处理的本质是数据处理,而数据处理的主要目标是获取有用的信息。

二、信息编码

在计算机的内部,数值、字符、图形、声音等所有信息都用二进制数来表示。这是因为在计算机内部信息的表示依赖于机器硬件电路的状态,信息采用的表示形式直接影响到计算机的结构与性能。采用二进制编码表示信息有以下几个优点:

●易于物理实现

因为具有两种稳定状态的物理器件是很多的,如门电路的导通与截止、电压的高与低等,而它们恰好对应表示1与0两个符号。如果采用十进制,要制造10种稳定状态的物理电路是非常困难的。

●二进制数运算简单

数学推导证明,对r进制数进行算术求和或求积运算,有r(r+1)/2种运算规则。采用十进制数要有55种规则,而采用二进制数则只要3种规则,因而简化了运算器等物理器件的设计。

●机器的可靠性高

由于电压的高低、电流的有无等都是一种质的变化,两种状态分明。所以采用二进制编码的传递抗干扰能力强,鉴别信息的可靠性高。

●通用性强

二进制编码不仅用于数值信息的编码而且用于非数值信息的数字化编码,特别是只有两个数字符号0和1正好与逻辑命题的两个值“真”和“假”相对应,从而为计算机实现逻辑运算和逻辑判断提供了方便。

(一)计算机的数字系统

数值信息在计算机内的就是用二进制数来表示。人们在日常生活中最熟悉的是十进制数,在使用计算机时就会接触到二进制、八进制和十六进制数。无论哪种数制,它们的共同特点都是进位记数制。

1. 数制、基数和位权

(1)数 制

数制就是用一组固定的数字和一套统一的规则来表示数的方法。按照进位方式计数的数就称为进位计数制。十进制即逢十进一,二进制则逢二进一。

(2)基 数

基数是指该进位制中允许选用的基本符号的个数。如果数制只采用r个基本符号,则称为基r数制,r称为数制的“基数”。例如,十进制数有10个数字符号0、1、2、…9,它的基数为10,二进制数有2个数字符号0和1,它的基数为2。

(3)位 权

同一个数字符号处在不同位置上时所代表的值是不同的。例如,数字8在一个十进制数中,在十位数的位置上表示80,在百位数位置上表示800,而在小数点后第一位上则表示0.8。同一个数字符号,在相同的进制数中且在相同的位置上,其值都是相同的。例如进制数中186与1385中的数字8都是在十位数位置上,而十位数位置上的8的值都是80。

通常称某个固定位置上的计数单位为位权。例如,在十进制数中,十位数位置上的位权是101,百位数位置上的位权是102,千位数位置上的位权是103,而在小数点后第1位上的位权是10 -1,等等。由此可见,在十进制数中,各位上的位权值是基数10的若干次幂。例如十进制数9876.543用位权可以表示成:9876.543=9 × 103 +8 × 102 +7 × 101 +6 × 100 +5 × 10 -1 +4 × 10 -2 +3 × 10 -3

各种进位制的特点参见表1-3。

表1-3 计算机中常采用的几种进位数制

2. 数制转换

四种进位数制对照表见表1-4

表1-4 四种进位数制对照表

(1)非十进制数转换成十进制数

将各种非十进制数(二进制数、八进制数、十六进制数)转换成十进制数可以按位权展开的方法,如下表达式

表达式本身就已提供了将r进制数转换成十进制数的方法。例如,将二进制数转换成十进制数时只要将二进制数按权值展开求和即可。

例1:将二进制数(10011011.101)B转换成十进制数。

(10011011.101)B=1 × 27 +1 × 24 +1 × 23 +1 × 21 +1 × 20 +1 × 2 -1 +1 × 2 -3 =(155.625)D

例2:将八进制数(3456.7)O转换成十进制数

(3456.7)O=3 × 83 +4 × 82 +5 × 81 +6 × 80 +7 × 8 -1 =(1838.875)D

例3:把十六进制数(2 F4.7 D)H转换成十进制数

(2F4.7D)H=2 × 162 +F × 161 +4 × 160 +7 × 16 -1 +D × 16 -2 =(756.48828)D

(2)十进制数转换成r进制数

将十进制数转换成r进制数时,整数部分的转换和小数部分的转换所采用的方法是不同的。

①整数部分的转换

整数部分的转换可以利用除r取余法,即把十进制数的整数部分不断除以基数r,取其余数,就可以转换成以r为基数的数。例如,要将十进制数转换成相应的二进制数,只要用十进制数不断去除以基数2,并记下每次的余数,直到商为0为止。最后一个非零余数即为二进制数的最高位,第一个求出的余数为最低位。这种方法称为除r取余法。

例4:把十进制数29转换成二进制数。

②小数部分转换

要将一个十进制小数转换成r进制小数时,可将十进制小数不断地乘以r并取其整数部分,直至小数部分为0,如果小数部分不能得0,则取有效位数即可。这种方法称为乘r取整法。

例5:将十进制数0.6125转换成相应的二进制数(基数r=2)。

如果十进制数包含整数和小数两部分,则必须将十进制小数点两边的整数和小数部分分开,分别完成相应转换,然后再把r进制整数和小数部分组合在一起。

例6:将十进制数29.6125转换成二进制数。

只要将上例整数和小数部分的转换结果组合在一起即可。即:

(29)D=(11101)B

(0.6125)D=(0.10011)B

(29.6125)D=(11101.10011)B

例7:将十进制数231.13转换成八进制数(基数r=8)。整数部分转换(除8取余)

小数部分转换(乘8取整)

所以(231.13)D≈(347.102)。

(3)非十进制数间的转换

通常两个非十进制数之间的转换方法是采用上述两种方法的组合,即先将被转换数转换为相应的十进制数,然后再将十进制数转换为其它进制数。从表1-5中可以看出,任一个八进制数可以用三位二进制数表示,而任一个十六进制数可以用四位二进制数表示,即81 =23,161 =24。正是由于二进制、八进制和十六进制数之间存在这种特殊关系,因此二进制数与八进制数之间、二进制数与十六进制数之间转换方法就比较容易。二进制、八进制和十六进制数之间的关系见表1-5。

表1-5 二进制、八进制和十六进制数之间的关系

注:十六进制数的十六个数字符号为分别为1、2、3、…9、A、B、C、D、E、F

根据这种对应关系,二进制数转换成八进制数的方法变得十分简单。只要将二进制数从小数点开始,整数部分从右向左3位划分为一组,小数部分从左向右3位划分一组,小数部分最后不足3位时在尾部补零,然后根据表1-5即可完成转换。

例8:将二进制数(10101011.11011101)B转换成八进制数。

方法:把二进制数整数和小数部分分别三位划分一组,然后将每组二进制数分别转换成八进制数,如下所示:

010 101 011.110 111 010

2  5  3  .6 7  2

所以(10101011.11011101)B=(253.672)。

将八进制数转换成二进制数的过程正好相反。即将八进制数的每一位数转换成三位二进制数即可。例如:

(275.46)o=(010111101.100110)B=(10111101.100110)B

二进制数与十六进制之间的转换就如同八进制同二进制之间一样,只是4位划分为一组。例如,将二进制数(1011111001111.110101011)B转换成十六进制数。

0001 0111 1100 1111.1101 0101 1000

1  7  C  F .D  5  8

所以(1011111001111.110101011)B=(17 CF.D58)H

(二)非数值信息的表示

在计算机内部,非数值信息也是采用“0”和“1”两个符号来进行编码表示的。

1. 西文字符数据的编码

使用计算机时,程序、控制命令等西文字符的输入、输出也都采用字符代码形式。在微型计算机系统中用的最多、最普遍的是美国标准信息交换字符码ASCII码(American Standard Card for In-formation Interchange),它是一种代表字符数据的二进制码。ASCII码已被国际标准化组织ISO采纳,见表1-6。

表1-6 7位ASCII码表

ASCII字符表说明:

NUL 空

SOH 标题开始

STX 正文开始

ETX 正文结束

EOT 传输结束

ENQ 询问字符

ACK 承认

BEL 报警

BS 退一格

HT 横向列表

LF 换行

VT 垂直制表

FF 走纸控制

CR 回车

SO 移位输出

SI 移位输入

DLE 数据链换码DC1 设备控制1

DC2 设备控制2

DC3 设备控制3

DC4 设备控制4

NAK 否定

SYN 空转同步

ETB 信息组传送结束

CAN 作废

EM 纸尽

SUB 换置

ESC 换码

FS 文字分隔符

GS 组分隔符

RS 记录分隔符

US 单元分隔符

SP 空格

DEL 删除

每个字符的ASCII码通常占用一个字节,但只用低7位二进制编码组成,排列次序为d6 d5 d4 d3 d2 d1 d0,d6为最高位,d0为最低位,所以ASCII码最多可以有128个不同的符号。而每个字符在计算机内实际上是用8位表示。正常情况下,最高一位d7为“0”。在需要奇偶校验时,这一位可用于存放奇偶校验的值,此时这一位称奇偶校验位。

要确定某个字符的ASCII码,可先在表中查到它的位置,然后确定它所在位置相应的列和行,根据列确定高位码(d6 d5 d4),根据行确定低位码(d3 d2 d1 d0),把高位码与低位码合在一起就是该字符的ASCII码。例如,字母“L”的ASCII码是1001100;符号“%”的ASCII码为0100101。

ASCII码是由128个字符组成的字符集。其中编码值0~31(0000000~0011111)不对应任何可印刷字符,通常称为控制符,用于计算机通信中的通信控制或对计算机设备的功能控制。编码值十进制为32(二进制编码为0100000)表示空格字符“SP”,编码值为十进制127(二进制编码为1111111)表示删除控制“Del”码……,其余94个字符称为可印刷字符。

字符0~9这十个数字字符的高三位编码(d6 d5 d4)为011,低4位为0000~1001。当去掉高3位的值时,低4位正好是二进制形式的0~9。这既满足正常的排序关系,又利于完成ASCII码与二进制码之间的转换。

英文字母的编码值满足正常的字母排序关系,且大、小写英文字母编码的对应关系相当简便,差别仅表现在d5位的值为0或1,有利于大、小写英文字母之间的编码转换。

由于微型计算机系统都采用了ASCII码这种相同的固定编码,因此也方便了不同厂家、不同型号的计算机设备之间的数据传输。

我们不需要记住ASCII码表,对各类字符的编排只要掌握以下要点:

(1)表中前面的32个码(00 H~1 FH)和最后一个编码3 FH不对应任何可印刷的字符,主要应用计算机通信中的通信控制或对计算机设备的控制,称为控制码。

(2)数字字符、英文大写字母A~Z和英文小写字母a~z分别按它们的自然顺序(依次递增)安排在表中不同位置。这3组字符在表中从小到大的依次顺序是数字字符、大写英文字母和小写英文字母。这样当知道同一组中的某个字符的ASCII码时,就可以推断其他字符的编码。例如,已知字符m的ASCII码值为109,则q的ASCII码值为113。

(3)英文大写字母和小写字母两组字符不是连续放在一起,它们对应字符的ASCII码值相差·31·32。例如“A”的ASCII码值为65,“a”的ASCII码值为97。

(4)字符的ASCII码是内部码,在计算机内部只占用1个字节。

除ASCII码还有许多种编码方法,如ANSI(美国国家标准协会)编码、EBCDIC编码等。AN-SI编码也称为扩展ASCII码,用8位表示字符(共有28即256个字符)。其中前128个字符编码与ASCII字符编码相同,只是最高位填充“0”;另外128个字符的最高位为“1”,可表示英镑符号、欧洲语言等。EBCDIC是IBM公司为它的大型机开发的8位字符编码。

2. 中文信息编码

(1)国标码(汉字信息交换码)

汉字信息在计算机内部也是采用二进制编码表示。汉字的数量很大,常用的汉字也有几千个之多,用一个字节来表示(8位编码)肯定不够,目前常见的汉字编码方案有两字节、三字节甚至四字节的。下面主要介绍一下“国家标准信息交换用汉字编码”。

《中华人民共和国国家标准信息交换用汉字编码字符集(基本集)》(GB2312-80)简称国标码,是计算机进行汉字信息处理和信息交换的标准编码。在该标准编码的字符集中,共收录汉字和图形符号7445个,包括:

①汉字6763个,其中一级常用汉字3755个,按汉语拼音字母顺序排列,二级常用汉字3008个,按部首顺序排列。

②一般符号202个,包括间隔符、标点符号、运算符、单位符号和制表符。

③序号60个,包括1. ~20.(共20个),(1)~(20)(共20个),①~⑩(共10个),(一)~(十)(共10个)。

④数字22个,包括阿拉伯数字0~9和罗马数字Ⅰ~Ⅻ。

⑤英文字母52个,包括大、小写字母各26个。

⑥日文假名169个,其中平假名83个,片假名86个。

⑦希腊字母48个,包括大、小写字母各24个。

⑧俄文字母66个,包括大、小写字母各33个。

⑨汉语拼音符号26个。

⑩汉语注音符号37个。

国标码规定:一个汉字用两个字节来表示,每个字节只用低七位,最高位为零。

类似ASCII码表,也有一张国标码表。在国标码表中有94行、94列,将6763个汉字按顺序放入表中,使得每个汉字对应一个唯一区号(汉字所在表中的行)和一个唯一的位号(汉字所在表中的列),一个汉字的区号和位号的组合就是该汉字的“区位码”。

区位码的具体表现形式是:高两位为区号,低两位为位号。例如“国”的区位码为2590,位于国标码表的25区90位。

区位码的排列规则如下:

1区:              键盘上没有的各种符号
2区:              各种符号
3区:              键盘上的各种符号(按纯中文方式给出)
4~5区:           日文字符
6区:              希腊字母
7区:              俄文字母
8区:              拼音声调即拼音字母名称
9区:              制表符号
10~15区:         暂未用
16~55区:         一级常用汉字(按拼音顺序排列)
56~87区:         二级常用汉字(按部首顺序排列)
88~94区:         用来存储自造字代码。

汉字的区号和位号分别加上32(20 H)就是此汉字的国标码值。

例如:“南”字区位码为3647,将区号36和位号47分别转换为十六进制,得到24 H和2 FH,将区号和位号分别加20 H,得到“南”的国标码为44 H 4 FH,在机内的形式是:10001001001111

第一字节      第二字节

随着国际间的交流与合作的扩大,信息处理应用对字符集提出了多文种、大字量、多用途的要求。1993年国际标准化组织发布了ISO/IEC 10646-1《信息技术通用多八位编码字符集第一部分体系结构与基本多文种平面》,我国等同采用此标准制定了GB 13000.1~1993。该标准采用了全新的多文种编码体系,收录了中、日、韩20902个汉字。国家标准GB18030~2000《信息交换用汉字编码字符集基本集的扩充》是我国继GB2312 ~1980和GB13000 ~1993之后最重要的汉字编码标准,GB18030目前的最新版本是GB18030~2005。在GB18030~2005中定义了76556个字符,目前收录了70244个汉字,随着我国汉字整理和编码研究工作的不断深入,以及国际标准ISO/IEC 10646的不断发展,GB18030所收录的字符将在新版本中增加。GB18030的总编码空间超过150万个码位,为解决人名、地名用字问题提供了方案,为汉字研究、古籍整理等领域提供了统一的信息平台基础。

(2)输入码

输入码是为使用户能够用西文键盘输入汉字而设计的编码,也称为外码。输入码有许多种不同的编码方案,目前常用的主要有四类。

①数字编码

这类编码就是利用一串数字来表示汉字编码方法。例如区位码、电报码等。

区位码与每个汉字之间具有一一对应的关系,最大的特点就是无重码,但难以记忆。

区位码主要用于怪癖字符的输入,即键盘上没有的字母、数字、符号和古怪冷僻的汉字。这就是为什么几乎所有的汉字操作系统都提供了区位码输入法的主要原因。

②字音编码

这类编码是基于汉语拼音的编码方法,简单易学,但同音字太多,重码率高,在输入时不仅要输入拼音码,还要增加选择操作。常用的有全拼、双拼等。目前比较常用的有微软拼音输入法、搜狗输入法等。

③字形编码

这种方案是将汉字的字型分解归类而创造出的编码方法。这种编码方法的最大优点是重码少,但编码规则不容易掌握,例如五笔字型和表型码就是这类编码。

④形音编码

这种编码是吸取了字音编码和字形编码的优点,使编码规则简化、重码率低,但掌握起来还是不容易,例如自然码就是属于这种编码。

(3)机内码

机内码简称为内码,是在计算机内部对汉字存储、处理而使用的编码。对于同一个汉字,无论用什么方法输入,输入到计算机后都会转换为唯一的内码。一个汉字的内码用2个字节存储。

在计算机内部,汉字编码和西文编码是共存的,如何区分它们是很重要的问题,因为对不同的信息有不同的处理方式。方法之一是对于二字节的国标码,将两个字节的最高位都设置为“1”,而ASCII码的最高位保持“0”,然后由软件或硬件根据字节的最高位做出判断。

例如,“南”字的国标码为10001001001111,机内码则为1100010011001111。

(4)输出码(字形码)

由于汉字是有笔划组成的“方块字”,所以对于同一规格的汉字无论其笔划多少,都可以写在相同大小的方框里。如果我们把这个方框用m行n列的表组成(称之为点阵),将汉字的字形描绘在表格中,笔画所到的格子为墨点,用二进制数“1”表示,没有笔画的格子为空白,用二进制数“0”表示,这样一个汉字的字形就可以用二进制编码表示了。这种代表汉字字形点阵的二进制数编码就是汉字的输出码。如图1-25所示。

图1-25 点阵汉字表示

存储一个16 × 16点阵的字形码需要16 × 16 ÷ 8=32字节的存储空间。

存储一个32 × 32点阵的字形码则需要32 × 32 ÷ 8=128字节的存储空间。

(5)各种代码之间的关系

从汉字代码转换的角度,一般可以把汉字信息处理系统抽象为一个结构模型,如图1-26所示。

图1-26 汉字信息处理系统模型