购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 信息的表示与存储

计算机科学的研究主要包括信息的采集、存储、处理和传输,而这些多与信息的量化和表示密切相关。本节从信息的定义出发,对数据的表示、转换、处理、存储方法进行论述,从而得出计算机对信息的处理方法。

1.2.1 数据与信息

数据是对客观事物的符号表示。数值、文字、语言、图形、图像等都是不同形式的数据。

信息(Information)是现代生活和计算机科学中一个非常流行的词汇。一般来说,信息既是对各种事物变化和特征的反映,又是事物之间相互作用、相互联系的表征。人通过接收信息来认识事物,从这个意义上来说,信息是一种知识,是接受者原来不了解的知识。

计算机科学中的信息通常被认为是能够用计算机处理的有意义的内容或消息,它们以数据的形式出现,如数值、文字、语言、图形、图像等。数据是信息的载体。

数据与信息的区别是:数据处理之后产生的结果为信息,信息具有针对性、时效性。尽管这是两种不同的概念,但人们在许多场合把这两个词互换使用。信息有意义,而数据没有。例如,当测量一个病人的体温时,假定病人的体温是39℃,则写在病历上的39℃实际上是数据。39℃这个数据本身是没有意义的:39℃是什么意思?什么物质是39℃?但是,当数据以某种形式经过处理、描述或与其他数据比较时,便赋予了意义。例如,这个病人的体温是39℃,这才是信息,这个信息是有意义的——39℃表示病人发烧了。

信息同物质、能源一样重要,是人类生存和社会发展的三大基本资源之一。可以说信息不仅维系着社会的生存和发展,而且在不断地推动着社会和经济的发展。

1.2.2 计算机中的数据

ENIAC是一台十进制的计算机,它采用十个真空管来表示一位十进制数。冯·诺依曼在研制IAS时,感觉这种十进制的表示和实现方式十分麻烦,故提出了二进制的表示方法,从此改变了整个计算机的发展历史。

二进制只用“0”和“1”两个数码。相对十进制而言,采用二进制表示不但运算简单、易于物理实现、通用性强,更重要的优点是所占的空间和所消耗的能量小得多,机器可靠性高。

计算机内部均用二进制来表示各种信息,但计算机及外部交互仍采用人们熟悉和便于阅读的形式,如十进制数据、文字显示以及图形描述等。其间的转换,则由计算机系统的硬件和软件来实现。转换过程如图1.19所示。例如,各种声音被麦克风接收,生成的电信号为模拟信号(在时间和幅值上连续变化的信号),必须经过一种被称为模/数(A/D)转换器的器件将其转换为数字信号,再送入计算机中进行处理和储存;然后将处理结果通过一种被称为数/模(D/A)转换器的器件将数字信号转换为模拟信号,我们通过扬声器听到的才是连续的正常的声音。

图1.19 各类数据在计算机中的转换过程

1.2.3 计算机中数据的单位

1.位(bit)

位是度量计算机中数据的最小单位。在数字电路和计算机技术中采用二进制表示数据,代码只有0和1,比特0和比特1无大小之分。采用多个数码(0和1的组合)来表示一个数,其中的每一个数码称为1位。

2.字节(Byte)

一个字节由8位二进制数字组成(1Byte=8bit)。字节是信息组织和存储的基本单位,也是计算机体系结构的基本单位。

早期的计算机并无字节的概念。20世纪50年代中期,随着计算机逐渐从单纯用于科学计算扩展到数据处理领域,为了体系结构上兼顾表示“数”和“字符”,就出现了“字节”。IBM公司在设计其第一台超级计算机STRETCH时,根据数值运算的需要,定义机器字长为64位。对于字符而言,STRETCH的打印机只有120个字符,本来每个字符用7位二进制位数表示即可(因为2 7 =128,所以最多可表示128个字符),但其设计人员考虑到以后字符集扩充的可能,决定用8位来表示一个字符。这样64位字长可容纳8个字符,设计人员把它叫作8个“字节”,这就是字节的来历。

为了便于衡量存储器的大小,统一以字节(Byte,B)为单位。

千字节 1KB=1024B=2 10 B

兆字节 1MB=1024KB=2 20 B

吉字节 1GB=1024MB=2 30 B

太字节 1TB=1024GB=2 40 B

3.字长

在计算机诞生初期,受各种因素限制,计算机一次能够同时(并行)处理8个二进制位。人们将计算机一次能够并行处理的二进制位称为该机器的字长,也称为计算机的一个“字”。随着电子技术的发展,计算机的并行能力越来越强,计算机的字长通常是字节的整倍数,如8位、16位、32位,发展到今天微型机的64位,大型机已达128位。

字长是计算机的一个重要指标,直接反映一台计算机的计算能力和计算精度。字长越长,计算机的数据处理速度越快。

1.2.4 进位计数制及其转换

日常生活中,人们使用的数据一般是十进制表示的,而计算机中所有的数据都是使用二进制表示的。但为了书写方便,也采用八进制或十六进制形式表示。下面介绍数制的基本概念及不同数制之间的转换方法。

1.进位计数制

多位数码中每一位的构成方法以及从低位到高位的进位规则称为进位计数制(简称数制)。

如果采用 R 个基本符号(例如0,1,2,…, R -1)表示数值,则称 R 数制, R 称该数制的基数(Radix),而数制中固定的基本符号称为“数码”。处于不同位置的数码代表的值不同,与它所在位置的“权”值有关。任意一个 R 进制数 D 均可展开为:

其中 R 为计数的基数; k i 为第 i 位的系数,可以为0,1,2,…, R -1中的任何一个; R i 称为第 i 位的权。表1.2给出了计算机中常用的几种进位计数制。

表1.2 计算机中常用的几种进位计数制得表示

表1.2中,十六进制的数字符号除了十进制中的10个字符,还使用了6个英文字母;A,B,C,D,E,F,它们分别等于十进制的10,11,12,13,14,15。

在数字电路和计算机中,可以用括号加数制基数下表的方法表示不同数制的数,如(25) 10 、(1101.101) 2 、(37F.5B9) 16 ,或者表示为(25) D 、(1101.101) B 、(37F.5B9) H

表1.3是十进制数0~15与等值二进制、八进制、十六进制数的对照表。

表1.3 不同进制数的对照表

续表

可以看出,采用不同的数制表示同一个数时,基数越大,则使用的位数越少。比如十进制数15,需要4位二进制数来表示,只需要2位八进制来表示,只需要1位十六进制数来表示——这也是为什么在程序的书写中一般采用八进制或十六进制表示数据的原因。在数制中有一个规则,就是N进制一定遵循“逢N进一”的进位规则,如十进制就是“逢十进一”,二进制就是“逢二进一”。

2. R 进制转换为十进制

在人们熟悉的十进制系统中,9658还可以表示成如下的多项形式:

(9658) D =9×10 3 +6×10 2 +5×10 1 +8×10 0

上式中的10 3 、10 2 、10 1 、10 0 是各位数码的权。可以看出,个位、十位、百位和千位上的数字只有乘上它们的权值,才能真正表示它的实际数值。

R 进制数按权展开求和即可得到相应的十进制数,这就实现了 R 进制对十进制的转换。例如:

(234) H =(2×16 2 +3×16 1 +4×16 0 D

=(512+48+4) D

=(564) D

(234) 0 =(2×8 2 +3×8 1 +4×8 0 D

=(128+24+4) D

=(156) D

(10110) B =(1×2 4 +0×2 3 +1×2 2 +1×2 1 +0×2 2 D

=(16+4+2) D

=(22) D

表1.4给出了部分二进制的权值。

表1.4 部分二进制的权值

续表

3.十进制转换为 R 进制

将十进制数转换为 R 进制数时,可将此数分成整数与小数两部分分别进行转换,然后再拼接起来即可。

下面分析整数部分的转换方法。一个十进制数D可以写成如下形式:

(D) 10 = k n -1 × 2 n -1 +k n -2 × 2 n -2 + +k 1 × 2 1 +k 0 × 2 0

= 2 × k n -1 × 2 n -2 +k n -2 × 2 n -3 + +k 1 +k 0 (1.1)

若将(D) 10 除以2,则得到商为 k n -1 ×2 n -2 + k n -2 ×2 n -3 +…+ k 1 ,余数为 k 0 ——二进制数的最低位(Least Significant Bit,LSB,最低有效位)。再将商写成如下形式:

k n -1 × 2 n -2 +k n -2 × 2 n -3 + +k 1 = 2 × k n -1 × 2 n -3 +k n -2 × 2 n -4 + +k 2 +k 1 (1.2)

若将式(1.2)再除以2,则得到余数为 k 1 ——二进制数的次低位……

根据上面的分析可知,将整数部分除以2,得到的余数为二进制数的最低位;每次将得到的商除以2,得到二进制数的其余各位。当商为0时,得到余数 k n -1 ——二进制数的最高有效位(Most Significant Bit,MSB)。

因此,将一个十进制整数转换成 R 进制数可以采用“除 R 逆序取余”法,即将十进制整数连续地除以 R 取余数,直到商为0,余数从右到左排列,首次取得的余数排在最右边。

小数部分转换成 R 进制数采用“乘 R 顺序取整”法,即将十进制小数不断乘以 R 取整数,直到小数部分为0或达到要求的精度为止(当小数部分永远不会达到0时);所得的整数从小数点之后自左往右排列,取有效精度,首次取得的整数排在最左边。

【例1-1】 将十进制数225.8125转换成二进制数。

转换结果为:(225.8125) D =(11100001.1101) B

【例1-2】 将十进制数225.15转化成八进制数,要求结果精确到小数点后5位。

转换结果为:(225.15) D ≈(341.11463) o

4.二进制与八进制、十六进制之间的转换

二进制数非常适合计算机内部数据的表示和运算,但书写起来位数比较长,如表示一个十进制数1024,写成等值的二进制就需11位,很不方便,也不直观。而八进制和十六进制数比等值的二进制数的长度短得多,而且它们之间转换也非常方便。因此在书写程序和数据到二进制数的地方,往往采用八进制数或十六进制数的形式。

由于二进制数、八进制和十六进制之间存在特殊关系:8 1 =2 3 、16 1 =2 4 ,即1位八进制数相当于3位二进制数,1位十六进制数相当于4位二进制数,因此转换方法就比较容易。八进制数与二进制数,十六进制数之间的关系如表1.5所示。

表1.5 八进制数与二进制数、十六进制数之间的关系

续表

根据这种对应关系,二进制数转换成八进制数时,以小数点为中心向左右两边分组,每3位为一组,两头不足3位补0即可。同样,二进制数转换成十六进制数只需要每4位为一组进行分组分别进行转换即可。例如:将二进制数(10101011.110101)B转换成八进制数:

又如:将二进制数(10101011.110101) B 转换成十六进制数:

同样,将八(十六)进制数转换成二进制数,只要将1位转换为3(4)位即可。例如:

注意:整数前的高位0和小数后的低位0可以不写,例如( 010 111 011 001 . 110 010 B 可以写为( 10 111 011 001 . 110 01 )B。

1.2.5 字符的编码

字符包括西文字符(字母、数字、各种符号)和中文字符,即所有不可做算术运算的数据。由于计算机是以二进制的形式存储和处理数据的,因此字符也必须按特定的规则进行二进制编码才能进入计算机。字符编码的方法很简单,首先确定需要编码的字符总数,然后将每一个字符按顺序确定序号,序号的大小无意义,仅作为识别与使用这些字符的依据。字符形式的多少涉及编码的位数。对西文与中文字符,由于形式的不同,使用不同的编码。

1.西文字符的编码

计算机中的数据都是用二进制编码表示的,用以表示字符的二进制编码称为字符编码。计算机中最常用的字符编码是ASCII(American Standard Code for Information Interchange,美国信息交换标准代码),被国际标准化组织指定为国际标准。ASCII码有7位码和8位码两种版本。国际通用的是7位ASCII码,用7位码二进制数表示一个字符的编码,共有2 7 =128个不同的编码值,相应可以表示128个不同字符的编码,如表1.6所示。

表1.6中对大小写英文字母、阿拉伯数字、标点符号及控制符等特殊符号规定了编码,表中每个字符都对应一个数值,称为该字符的ASCII码值。其排列次序为b 6 b 5 b 4 b 3 b 2 b 1 b 0 ,b 6 为最高位,b 0 为最低位。

表1.6 7位ASCII码表

从ASCII码表中看出,有34个非图形字符(又称为控制字符)。例如:

SP(Space)编码是0100000 空格

CR(Carriage Return)编码是0001101 回车

DEL(Delete)编码是1111111 删除

BS(Back Space)编码是0001000 退格

其余94个可打印字符,也称为图形字符。在这些字符中,从小到大排列有0~9、A~Z、a~z,且小写比大写字母的码值大32,即位b 5 为0或1,有利于大、小写字母之间的编码转换。有些特殊的字符编码是容易记忆的,例如:

“a”字符的编码为1100001,对应的十进制数是97,则“b”的编码值是98。

“A”字符的编码为1000001,对应的十进制数是65,则“B”的编码值是66。

“0”数字字符的编码为0110000,对应的十进制数是48,则“1”的编码值是49。

计算机的内部用一个字节(8个二进制位)存放一个7位ASCII码,最高位置为0。

2.汉字的编码

ASCII码只对英文字母、数字和标点符号进行了编码。为了使计算机能够处理、显示、打印、交换汉字字符,同样也需要对汉字进行编码。我国于1980年发布了国家汉字编码标准GB 2312—80,全称是《信息交换用汉字编码字符集—基本集》(简称GB码或国际标码)。根据统计,把最常用的6 763个汉字分成两级:一级汉字有3 755个,按汉语拼音字母的次序排列;二级汉字有3 008个,按偏旁部首排列。由于一个字节只能表示256种编码,是不足以表示6 763个汉字的,所以一个国标码用两个字节表示一个汉字,每个字节的最高位为0。

为避开ASCII码表中的控制码,将GB 2312—80中的6 763个汉字分为94行、94列,代码表分94个区(行)和94个位(列)。由区号(行号)和位号(列号)构成了区位码。区位码最多可以表示94×94=8 836个汉字。区位码有4位十进制数字组成,前两位为区号,后两位为位号。在区位码中,01~09区为特殊字符,10~55区为一级汉字,56~87区为二级汉字。例如汉字“中”的区位码位5 448,即它位于第54行、第48列。

区位码是一个4位十进制数,国标码是一个4位十六进制数。为了与ASCII码兼容,汉字输入区位码与国标码之间有一个简单的转换关系。具体方法是:将一个汉字的十进制区号和十进制位号分别转换成十六进制;然后再分别加上20H(十进制就是32),就成为汉字的国标码。例如,汉字“中”字的区位码与国标码及转换如下:

区位码 5448D 3630H

国标码 8680D 3630H+2020H=5650H

世界上使用汉字的地方除了中国大陆,还有中国台湾及港澳地区、日本和韩国,这些地区和国家使用了与中国大陆不同的汉字字符集。中国台湾、香港等地区使用的汉字是繁体字即BIG5码。

1992年通过的国际标准ISO 10646,定义了一个用于世界范围各种文字及各种语言的书面形式的图形字符集,基本上收全了上面国家和地区使用的汉字。Unicode编码标准对汉字集的处理与ISO 10646相似。

GB 2312—80中因有许多汉字没有包括在内,为此有了GBK编码(扩展汉字编码),它是对GB 2312—80的扩展,共收录了21003个汉字,支持国际标准ISO 10646中的全部中日韩汉字,也包含了BIG5(台、港、澳)编码中的所有汉字。GBK编码于1995年12月发布。目前Windows 95以上的版本都支持GBK编码,只要计算机安装了多语言支持功能,几乎不需要任何操作就可以在不同的汉字系统之间自由变换。“微软拼音”“拼音”“紫光”等几种输入法都支持GBK字符集。2001年我国发布了GB 18030编码标准,它是GBK的升级,GB 18030编码空间约为160万码位,目前已经纳入编码的汉字约为2.6万个。

3.汉字的处理过程

我们知道,计算机内部只能识别二进制数,任何信息(包括字符、汉字、声音、图像等)在计算机中都是以二进制形式存放的。那么,汉字究竟是怎样被输入到计算机中,在计算机中又是怎样存储,然后又经过何种转换,才在屏幕上显示或在打印机上打印出汉字的?

从汉字编码的角度看,计算机对汉字的信息的处理过程实际上是各种汉字编码间的转换过程。这些编码主要包括:汉字输入码、汉字内码、汉字地址码、汉字字形码等。这一系列的汉字编码及转换、汉字信息处理中的各编码及流程如图1.20所示。

从图1.20中了可以看出:通过键盘对每个汉字输入规定的代码,即汉字的输入码(例如拼音输入码)。不论哪一种汉字输入方法,计算机都将每个汉字的汉字输入码转换为相应的国标码,然后再转换为机内码,就可以在计算机内存储和处理了。输出汉字时,先将汉字的机内码通过简单的对应关系转换为相应的汉字地址码,然后通过汉字地址码对汉字库进行访问,从字库中提取汉字的字形码,最后根据字形数据显示和打印出汉字。

图1.20 汉字信息处理系统的规模

1)汉字输入码

为将汉字输入计算机而编制的代码称为汉字输入码,也叫外码。汉字输入码是利用计算机标准键盘上按键的不同排列组合来对汉字的输入进行编码。目前汉字输入编码法的开发研究种类繁多,已多达数百种。一个好的输入码应是:编码短,可以减少按键的次数;重码少,可以实现盲打;好学好记,便于学习和掌握。但目前还没有一种全部符合上述要求的汉字输入法编码方法。目前常用的输入法类别有:音码、形码、语音输入、手写输入或扫描输入等。实际上,区位码也是一种输入法,其最大优点是一字一码的无重码输入,最大的缺点是代码难以记忆。

可以想象,对于同一个汉字,不同的输入法有不同的输入码。例如:“中”字的全拼音输入码是“zhong”,其双拼输入码是“vs”,而五笔的输入时“kh”。这种不同的输入码通过输入字典转换统一到标准的国标码。

2)汉字内码

汉字内码是为在计算机内部对汉字进行存储、处理的汉字编码,它应满足汉字的存储、处理和传输的要求。当一个汉字输入计算机后转换为内码,才能在机器内传输、处理。汉字内码的形式也有多种多样。目前,对应于国标码,汉字的内码用2个字节存储,并把每个字节的最高二进制位置“1”作为汉字内码的标识,以免与单字节的ASCII码产生歧义。如果用十六进制来表述,就是把汉字国标码的每个字节上加一个(80)H(即二进制数10000000)。所以,汉字的国标码与其内码存在下列关系:

汉字的内码=汉字的国标码+(8080) H

例如,在前面已知“中”字的国标码(5650) H ,则根据上述关系式得:

“中”字的内码=“中”字的国标码(5650) H +(8080) H =(D6D0) H

由此看出:西文字符的内码是7位ASCII码,一个字节的最高位为0。每个西文字符的ASCII码值均小于128。为了与ASCII码兼容,汉字用两个字节来存储,区位码再分别加上20H,就成为汉字的国标码。计算机内部为了能够区分是汉字还是ASCII码,将国标码每个字节的最高位由0变为1(也就是说汉字内码的每个字节都大于128),变换后的国标码称为汉字内码。

4.汉字字形码

经过计算机处理的汉字信息,如果要显示或打印出来供阅读,则必须将汉字内码转换成人们可读方块汉字。汉字字形码又称汉字字模,用于汉字在显示屏或打印机输出。汉字字形码通常有两种表示方式:点阵和矢量表示方式。

用点阵表示字形时,汉字字形码指的就是这个汉字字形点阵的代码。根据输出汉字的要求不同,点阵的多少也不同。简易型汉字为16×16点阵,普通型汉字为24×24点阵,提高型汉字为32×32点阵、48×48点阵,等等。图1.21显示了“次”字的16×16字形点阵和代码。

在一个16×16的网格中用点描出一个汉字,如“次”字,整个网格分为16行16列,每个小格用1位二进制编码表示,有点的用“1”表示,没有点的用“0”表示。这样,从上到下,每一行需要16个二进制位,占两个字节,如第一行的点阵编码是(0080)H。描述整个汉字的字形需要32个字节存储空间。汉字的点阵字形编码仅用于构造汉字的字库。一般对应不同的字体(如宋体、楷体、黑体)有不同的字库,字库中存储了每个汉字的点阵代码。字模点阵只能用来构成字库,而不能用于机内存储。输出汉字时,先根据汉字内码从字库中提取汉字的字形数据,然后根据字形数据显示和打印出汉字。

图1.21 汉字字形点阵机器编码

点阵规模愈大,字形愈清晰美观,所占存储空间也愈大。两级汉字大约占用256KB。点阵表示方式的缺点是字形放大后产生的效果差。

矢量表示方式存储的是描述汉字字形的轮廓特征。当要输出汉字时,通过计算机的计算,由汉字字形描述生成所需大小和形状的汉字点阵。矢量化字形描述与最终文字显示的大小、分辨率无关,因此可产生高质量的汉字输出。Windows中使用的TrueType技术就是汉字的矢量表示方式,它解决了汉字点阵字形放大后出现锯齿现象的问题。

5.汉字地址码

汉字地址码是指汉字字库(这里主要指整字形的点阵式字模库)中存储汉字字形信息的逻辑地址码。需要向输出设备输出汉字时,必须通过地址码对汉字库进行访问。汉字库中,字形信息都是按一定顺序(大多是按标准汉字交换码中汉字的排列顺序)连续存放在存储介质中,所以汉字地址码也大多是连续有序的,而且与汉字内码间有着简单的对应关系,以简化汉字内码到汉字地址码的转换。

6.其他汉字内码

GB 2312—80国标码只能表示和处理6 763个汉字,为了统一表示世界各国、各地区的文字,便于全球范围的信息交流,各级组织公布了各种汉字内码。

(1)GBK码(扩充汉字内码规范)是我国制定,对多达2万多的简、繁汉字进行了编码,是GB 2312—80码的扩充。这种内码仍以2字节表示一个汉字,第一个字节为(81)H~(FE)H,第二个字节为(40)H~(FE)H。虽然第二个字节的最左边不一定是1,但因为汉字内码总是2字节连续出现的,所以即使与ASCII码混合在一起,计算机也能够加以正确区别。简体版中文Windows 95/98/2000/XP使用的是GBK内码。

(2)UCS码(通过多八位编码字符集)是国际标准化组织(ISO)为各种语言字符制定的编码标准。ISO/IEC 10646字符集中的每个字符用4字节(组号、平面号、行号和字位号)唯一地表示,第一平面(00组中的00平面)称为基本多文种平面(Basic Multilingual Plane,BMP),包含字母文字、音节文字以及中、日、韩(CJK)的表意文字等。

(3)Unicode编码是另一个国际编码标准,它最初是由Apple公司发起制定的通用多文种字符集,后来被多家计算机厂商组成Unicode协会进行开发,并得到计算机界的支持,成为能用双字节编码统一地表示几乎世界上所有书写语言的字符编码标准。

目前,Unicode编码可容纳65 536个字符编码,主要用来解决多语言的计算问题,如不同国家的字符标准,允许交换、处理和显示多语言文本以及公用的专业符号和数学符号。随着Internet的迅速发展,不同国家之间的人们进行数据交换的需求越来越大,Unicode编码因此成为当今最为重要的交换和显示的通用字符编码标准,它适用于当前所有已知的编码,覆盖了美国、欧洲、中东、非洲、印度、亚洲和太平洋地区的语言以及专业符号。目前,Unicode编码在网络、Windows系统和很多大型软件中得到应用。

(4)BIG5码是目前中国台湾、香港地区普遍适用的一种繁体汉字的编码标准。中文繁体版Windows 95/98/2000/XP使用的是BIG5内码。 EaXnUtlzRCMOIH7vSHdrVdmEVd5yyS4nNKrVTWJkszVRtb78Eq9/iPl4EFJOCgc1

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开