大学计算机信息技术
上QQ阅读APP看书,第一时间看更新

1.2 信息的表示与存储

计算机最基本的功能是对信息进行采集、存储、处理和传输。信息的载体是数据,数据包括数值、字符、图形、图像、声音、视频等多种形式。计算机内部采用二进制方式表示数据,因此各类数据均需要转换为二进制,以便计算机进行运算处理与存储。

1.2.1 计算机中的数据及其单位

1.计算机中的数据

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

一般来说,信息既是对各种事物的变化和特征的反映,又是事物之间相互作用和联系的表征。人通过接受信息来认识事物,从这个意义上来说,信息是一种知识,是接受者原来不了解的知识。

在计算机中,各种信息都是以数据的形式出现,对数据进行处理后产生的结果为信息,因此数据是计算机中信息的载体。尽管数据与信息是两个不同的概念,但人们在许多场合把这两个词互换使用。信息有意义,而数据本身没有意义,只有经过处理和描述,才能赋予其实际意义。例如,37℃是一个数据,没有实际意义,但当它表示气温或体温时,就变成了有意义的信息。

计算机内部均用二进制来表示各种信息。二进制只有“0”和“1”两个数码。相对十进制而言,用二进制表示不但运算简单、易于物理实现、通用性强,更重要的优点是占用的空间和消耗的能量小得多,机器可靠性高。但计算机与外部交往仍采用人们熟悉和便于阅读的形式,如十进制数据、文字显示以及图形描述等,这之间的转换则由计算机系统来完成。

2.计算机中数据的单位

在计算机内存储和运算数据时,常用的数据单位有以下几种。

(1)比特(bit)和字节(Byte)

比特(位)是度量数据的最小单位。在数字电路和计算机技术中采用二进制表示数据,代码只有“0”和“l”。一字节由8比特(位)二进制数字组成,字节是信息组织和存储的基本单位,也是计算机体系结构的基本单位。

在计算机中,通常用B(字节)、KB(千字节)、MB(兆字节)或GB(吉字节)为单位来表示存储器(如内存、硬盘、U盘等)的存储容量或文件的大小。所谓存储容量,是指存储器中能够包含的字节数,存储单位B、KB、MB、GB和TB的换算关系如下。

千字节 1 KB=1 024 B=210B

兆字节 1 MB=1 024 KB=220B

吉字节 1 GB=1 024 MB=230B

太字节 1 TB=1 024 GB=240B

(2)字长

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

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

1.2.2 常用数制及其转换

日常生活中人们使用过许多数制,如表示时间的六十进制,表示星期的七进制,表示年份的十二进制,还有最常用的十进制。计算机中采用的数是二进制数。任何信息必须转换成二进制数据后才能由计算机进行处理。

1.进位计数制

数制是指用一组特定的数字符号和统一的规则来表示数值的方法。其中,按照从低向高进位方式计数的数制称为进位计数制。

数制中有数位、基数(base)和位权(weight)3个要素。“数位”是指数码在某个数中所处位置。“基数”是指在某种数制中,每个数位上能使用的数码的个数。“位权”是指数码在不同的数位上表示的数值的大小。位权以指数形式表达,以基数为底,其指数是数位的序号。数位的序号以小数点为界,其左边(个位)的数位序号为0,向左每移一位序号加1,向右每移一位序号减1。

如果采用R个数码(如0,1,2,…,R−1)表示数值,相邻两位之间为“逢R进一”的关系,它的位权可表示成Rii为数位序号。任何一个R进制数都可以表示为“按位权展开”的多项式之和,该表达式就是数的一般展开表达式。

其中,R为基数,ki为第i位的数码,Ri称为第i位的位权。计算机中常用的几种进位计数制如表1-2所示。

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

其中,十六进制是人们在计算机指令代码和数据的书写中经常使用的数制。在十六进制中,数用0,1,…,9和A,B,…,F共16个符号来描述,十六进制与十进制的对应关系是:0~9对应0~9;A~F对应10~15。

一般地,用括号后加进位制基数下标的方式,或者用括号后加进位制英文字母下标的方式来表示不同数制的数,如(23)10、(25F.5A3)16、(101101.011)2,或者表示为(23)D、(25F.5A3)H、(101101.011)B等。

表1-3列出了几种常用数制之间的对应关系。

表1-3 常用数制之间的对应关系表

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

2.R进制数转换为十进制

在R进制数(如十进制数、二进制数、八进制数和十六进制数等)中,遵循“逢R进一”的进位规则,采用“按位权展开”并求和的方法,可得到等值的十进制数。

以下是R进制数转换为十进制的方法(即“按权展开”法)。

(1)十进制(Decimal)

任意一个十进制数值都可用由0,1,2,3、4,5,6,7,8,9共10个数码组成的字符串来表示。它的基数R=10,其进位规则是“逢十进一”,它的位权可表示成10i。其按权展开式为:

例如,(123.45)D=1×102+2×101+3×100+4×10-1+5×10-2

(2)二进制(Binary)

任意一个二进制数可用由0,1共两个数码组成的字符串来表示。它的基数R=2,其进位规则是“逢二进一”,它的位权可表示成2i。其按权展开式为:

例如,(1101.11)B=1×23+1×22+0×21+1×20+1×2-1+1×2-2=8+4+0+1+0.5+0.25=13.75。

转换结果为:(1101.11)B=(13.75)D

(3)八进制(Octal)

和十进制与二进制的讨论类似,任意一个八进制数可用由0,1,2,3,4,5,6,7共8个数码组成的字符串来表示。它的基数R=8,其进位规则是“逢八进一”,它的位权可表示成8i。其按权展开式为:

例如,(345.08)O=3×82+4×81+5×80+0×8-1+8×8-2=192+32+5+0+0.125=229.125。

转换结果为:(345.08)O=(229.125)D

(4)十六进制(Hexadecimal)

和十进制与二进制的讨论类似,任意一个十六进制数可用0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个数码组成的字符串来表示,其中符号A、B、C、D、E、F分别代表十进制数值10,11,12,13,14,15,它的基数R=16,其进位规则是“逢十六进一”,它的位权可表示成16i。其按权展开式为:

例如,(2AB.8)H=2×162+10×161+11×160+8×16-1=512+160+11+0.5=683.5。

转换结果为:(2AB.8)H=(683.5)D

3.十进制转换为R进制数

将十进制数转换为R进制数时,对具有整数和小数两部分的十进制数,要将其整数部分和小数部分分别转换,然后用小数点连接起来。

整数的转换采用“除R取余,逆序排列”法,将待转换的十进制数连续除以R,直到商为0,每次得到的余数按相反的次序(即第一次除以R得到的余数排在最低位,最后一次除以R得到的余数排在最高位)排列起来就是相应的R进制数。

小数的转换采用“乘R取整,顺序排列”法,将被转换的十进制纯小数反复乘以R,每次相乘乘积的整数部分若为1,则R进制数的相应位为1;若整数部分为0,则相应位为0。由高位向低位逐次进行,直到剩下的纯小数部分为0或达到要求的精度为止。

下面以十进制数转换为二进制数为例,具体说明十进制转换为R进制数的过程。

例如,将十进制数(124.8125)D转换成二进制数。

最终转换结果为:(124.8125)D=(1111100.1101)B

4.二进制与八进制、十六进制的相互转换

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

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

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

(1)二进制数转换为八进制数或十六进制数

二进制数转换为八进制数时,以小数点为界向左右两边分组,每3位为一组,两头不足3位补0即可。同样,二进制数转换为十六进制数时,按每4位为一组分组进行转换即可。

例如:

(2)八进制数或十六进制数转换为二进制数

同样,八进制数或十六进制数转换为二进制数,只要将1位(八进制数或十六进制数)转换为3或4位(二进制数)表示即可。

例如:

1.2.3 计算机字符编码

1.西文字符的编码

在计算机处理的数据中,除了数值型数据外,日常生活中还经常使用字符这类不可做算术运算的数据,包括字母、数字、各种符号等西文字符和中文字符等。由于计算机只能识别二进制代码,为了能够对字符进行识别和处理,同样要对字符用二进制编码表示。对字符进行编码时,首先要确定总字符数,再按顺序为每一个字符分配序号即可,每一个西文字符和一个确定的编码相对应。

西文字符主要用ASCII编码,ASCII码是“美国信息交换标准代码”(American Standard Code for Information Interchange)的缩写,该标准已经被国际标准化组织(International Organization for Standardization,ISO)指定为国际标准,是使用最广泛的一种字符编码。

国际通用的ASCII码的编码规则是:每个字符用7位二进制数(b6b5b4b3b2b1b0)表示,共有27=128个编码值,如表1-5所示。

表1-5 标准7位ASCII码

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

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

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

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

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

BS(Back Space)编码是0001000   退格

CR(Carriage Return)编码是0001101   回车

DEL(Delete)编码是1111111   删除

SP(Space)编码是0100000   空格

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

2.中文字符的编码

要想让计算机能够处理汉字信息,就必须对汉字也进行编码。

汉字信息的编码体系包括机内码、输入码、字形码、交换码、地址码和控制码。其中最主要的是机内码、输入码和字形码。

(1)国标码

我国于1980年颁布了国家汉字编码标准GB2312-80,全称是《信息交换用汉字编码的字符集—基本集》。GB2312-80汉字编码标准是“中华人民共和国国家标准信息交换汉字编码”,汉字信息交换码简称交换码,也叫国际码(或GB码)。该标准收入了6 763个常用汉字(分成两级:一级汉字有3 755个,按汉语拼音字母的次序排列;二级汉字有3 008个,按偏旁部首排列),以及682个非汉字图形符,标码的基本集共有7 445个符号。

由于一字节只能表示256种编码,不足以表示6 763个汉字。所以,国标码规定,任何汉字编码都必须包括该标准规定的这两级汉字,每个汉字字符由两字节代码长度的一个编码组成。每字节的最高位恒为“0”,其余7位用于组成各种不同的码值,如图1-2所示。

图1-2 汉字国标码的编码

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

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

汉字国标码=汉字的区位码+2020H

例如,已知汉字“中”的区位码为5448D(十进制数)、3630H(十六进制数),则根据上述关系式得:

汉字“中”的国标码=汉字“中”的区位码+2020H=5650H

二进制表示为:(00110110 00110000)B+(00100000 00100000)B=(01010110 01010000)B

(2)汉字在计算机中的处理过程

计算机内部使用二进制来处理汉字,汉字从输入到计算机内部的处理,再到汉字输出,需要多种汉字编码的支持和相互转换才能实现。这些编码主要包括汉字输入码、汉字内码、汉字地址码、汉字字形码等。这一系列的汉字编码及转换、汉字信息处理中的各编码及流程如图1-3所示。

图1-3 汉字信息汉字处理流程

(3)输入码

输入码是利用计算机标准键盘按键的不同排列组合来对汉字的输入进行编码,也叫外码。目前汉字输入编码方法的开发研究种类繁多,基本上可分为音码、形码、语音、手写输入或扫描输入等。对于同一个汉字,输入法不同,则输入码也不同,不管使用何种输入法,当用户向计算机输入汉字时,最终存入计算机中的总是它的机内码,与采用的输入法无关。这是因为在输入码与国标码之间存在一个对应关系,不同输入法的汉字输入码会通过输入字典统一转换为标准的国标码。

(4)汉字机内码

机内码是计算机内部进行文字(字符、汉字)信息处理时使用的编码,简称内码。当汉字信息输入计算机中后,都要转换为机内码,才能进行各种存储、加工、传输、显示和打印等处理。

ASCII码是7位单字节编码,最高位为“0”。国标码中每个汉字采用两字节表示,故称之为双字节编码,最高位也为“0”。为了实现中、英文兼容,在汉字机内码中,通常利用字节的最高位来区分某个码值是代表汉字还是代表ASCII字符。具体方法是,若最高位为“1”则视为汉字符,为“0”则视为ASCII字符。所以,汉字机内码是在国标码的基础上,把两字节的最高位一律由“0”改为“l”而构成。由此可见,同一汉字的国标码与机内码并不相同,而对ASCII字符来说,机内码与国标码的码值是一样的。所以,汉字的国标码与其内码有下列关系。

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

例如,在前面已知汉字“中”的国标码为5650H,则根据上述公式得:

汉字“中”的内码=汉字“中”的国标码5650H+8080H=D6D0H

二进制表示为:(01010110 01010000)B+(10000000 1000000)B=(11010110 11010000)B

(5)汉字字形码

汉字字形码是指汉字字形存储在字库中的数字化代码,用于计算机显示和打印输出汉字的外形,即称为“字模”。同一汉字可以有多种“字模”,也就是字体或字库。字形码通常有点阵表示方式和矢量表示方式。

用点阵表示汉字的字形时,汉字字形显示通常使用16×16点阵,汉字打印可选用24×24、32×32、48×48等点阵。点数越多,打印的字体越美观,但汉字占用的存储空间也越大,而不同的字体又对应不同的字库。图1-4是汉字“景”的24×24点阵构成示意图。

由图1-4可知,用24×24点阵表示一个汉字,则一个汉字占24行,每行有24个点,在存储时用3字节存放一行上24个点的信息,对应位置为“0”表示该点为“白”,“1”表示该点为“黑”。因此,一个汉字“景”的点阵字库的总占用空间为24×24/8=72字节。

图1-4 “景”的24×24点阵构成示意图

矢量字库存储的是描述汉字字形轮廓特征的数学模型。矢量字库中的汉字可以随意放大、缩小而不失真,而且所需存储量和字符大小无关。矢量字符的输出分为两步,首先从字库中取出它的字符信息,然后根据数学模型进行计算,生成所需大小和形状的汉字点阵。

(6)汉字地址码

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

(7)其他汉字内码

GB2312-80国标码只能表示和处理6 763个汉字,为了统一表示世界各国、各地区的文字,便于全球范围的信息交流,各级组织公布了各种汉字内码,常用的有GBK码、UCS码、Unicode码、BIG5码等。

GBK码的全称为《汉字内码扩展规范》,是在GB2312-80标准基础上的内码扩展规范,共收录了21 003个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中、日、韩汉字,并包含了BIG5码中的所有汉字。GBK编码方案于1995年10月制定,1995年12月正式发布,目前中文版的Windows 95、Windows 98、Windows NT以及Windows 2000、Windows XP、Windows 7等都支持GBK编码方案。

UCS码是国际标准化组织为各种语言字符制定的另一种国际编码标准,是所有其他字符集标准的一个超集。它保证与其他字符集是双向兼容的,包含了用于表达所有已知语言的字符,即不仅包含字母文字、音节文字,还包含中文、日文和韩文这样的象形文字等。

Unicode码(又称统一码、万国码、单一码)是由一个名为Unicode的学术学会机构制定的一个国际字符编码标准。由于不同国家和地区采用的字符集不一致,所以会出现无法正常显示所有字符的情况,为了满足跨语言、跨平台进行文本转换、处理的要求,Unicode于1990年开始研发,1994年正式公布。该国际编码标准为每种语言中的每个字符设定了统一并且唯一的二进制编码,成为能用双字节编码统一地表示几乎世界上所有书写语言的字符编码标准,可容纳65 536个字符编码。目前,Unicode码在网络、Windows系统和很多大型软件中得到应用。

Big 5码(又称大五码)是目前我国台湾、香港等地区普遍使用的一种繁体汉字编码标准,它包括440个符号,一级汉字5 401个、二级汉字7 652个,共计13 060个汉字。