任务1-2 计算机中数据的表示与存储
【任务描述】
1.字符和汉字在计算机内是如何存储的?如果将26个英文字母存储在计算机内,需要多少存储空间?
2.32×32点阵字库中每一个汉字需要多少字节存储?
3.假如家中新安装了宽带,带宽50Mbps。当使用该宽带下载文件时,理论上要下载有512万个汉字的文本文件,至少需要多长时间?
【知识点分析】
计算机最主要的功能是处理信息,如处理文字、声音、图形和图像等信息。在计算机内部,各种信息都必须经过数字化编码后才能被传送、存储和处理。因此,要完成此任务,还必须要了解计算机中信息的表现形式。
一、数制
(一)二进制
计算机内部是一个二进制数字世界,采用二进制来保存数据和信息。无论是指令还是数据,若想存入计算机中,都必须采用二进制编码形式,即使是图形、图像、声音等信息,也必须转换成二进制,才能存入计算机中。为什么在计算机中必须使用二进制数,而不使用人们习惯的十进制数?原因在于:
二进制对于现代计算机的研制具有重要的理论意义:首先,二进制有两个数码,即0和1,这在自然界中使用具有两种稳定状态的电气组件很容易表示和存储,如开关的通、断,电容的充电与放电,电压的高与低等。计算机的电子器件、磁存储和光存储的原理都采用了二进制的思想,即通过磁极取向、表面凹凸来记录数据的0和1。其次,二进制用来表示的二进制数的编码、计数、加减运算规则简单,使计算机运算器的硬件结构大大简化,控制也就简单多了。而且,1和0还可以代表逻辑值的“真”和“假”。
但由于二进制数书写冗长、易错、难记,并且十进制数与二进制数之间的转换过程也比较麻烦,所以,尽管在计算机内部都使用二进制数来表示各种信息,在计算机外部仍采用人们熟悉和便于阅读的形式表示信息,如采用十进制、八进制、十六进制、文字、图形、音视频等,再由计算机系统将各种形式的信息转化为二进制的形式并储存在计算机的内部。
(二)进位计数制
数制,也称计数制,是指用一组固定的符号和统一的规则来表示数值的方法。按进位的方法进行计数,称为进位计数制。下面介绍各种进制数的表示。
1.十进制
在十进制数中,基数为 10。因此在十进制数中出现的数字字符有10个:0、1、2、3、4、5、6、7、8和9。采用“逢十进一”的计数原则。对任何一个n位整数,m位小数的十进制数N,都可按权展开,其展开形式表示为:
即:
如十进制数123.45可以表示为:
2.二进制
在二进制数中,基数为2。因此在二进制数中出现的数字字符只有2个:0与1。采用“逢二进一”的计数原则。对任何一个n位整数,m位小数的二进制数N可表示为:
即:
上式即为二进制数按权展开的形式。不难看出,它与十进制的差别仅仅在于进位基数变化了,每个位的“权”表现为2的幂次关系。如二进制数10 011.101可以表示为:
3.八进制
在八进制数中,基数为8。因此在八进制数中出现的数字字符有8个:0、1、2、3、4、5、6和7。采用“逢八进一”的计数原则。对任何一个n位整数,m位小数的八进制数N可表示为:
即:
上式即为八进制数按权展开的形式。它与十进制和二进制的差别也仅仅在于进位基数变化了,每个位的“权”表现为8的幂次关系。如八进制数123.45可以表示为:
4.十六进制
在十六进制数中,基数为16。因此在十六进制数中出现的数字字符有16个:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E 和 F。计数原则为“逢十六进一”。这里用 A、B、C、D、E、F 代表十进制数中 10、11、12、13、14、15。对任何一个n位整数,m位小数的十六进制数N,可表示为:
即:
上式即为十六进制数按权展开的形式。它与十进制、二进制、八进制的差别也在于进位基数变化了,每个位的“权”表现为16的幂次关系。如十六进制数123.45可以表示为:
二、数制间的相互转换
(一)非十进制数转换为十进制数
非十进制数转换成十进制数的方法是:把各个非十进制数写出它的按权展开的形式,然后计算出相应的十进制数。
【例1.1】 把二进制数(1101.101)2转换成十进制数。
解:(1101.101)2=1×23+1×22+0×21+1×20+1×2-1+0×2-2+1×2-3=8+4+0+1+0.5+0.25+0.125=(13.875)10
【例1.2】 把八进制数(256.124)8转换成十进制数。
解:(256.124)8=2×82+5×81+6×80+1×8-1+2×8-2+4×8-3=128+40+6+0.125+0.03125+0.0078125=(174.1640625)10
【例1.3】 把十六进制数(12CA.48)16转换成十进制数。
解:(12CA.48)16=1×163+2×162+C×l61+A×l60+4×16-1+8×16-2=4096+512+192+10+0.25+0.03125=(4810.28125)10
(二)十进制数转换为非十进制数
转换规则:整数部分采用“逐次除以基数取余”法,直到商为0;小数部分采用“逐次乘以基数取整”法,直到小数部分为0或取到有效数位。
1.十进制数转换成二进制数
整数部分采用“逐次除以2取余”倒法;小数部分采用“逐次乘以2取整”法。
【例1.4】 将十进制数6转换为二进制数,其过程如下所示:
【例1.5】 将0.25转换为二进制小数,其过程如下所示:
需要注意的是,并不是任何十进制小数都能精确转换为二进制小数,此时,只能按计算精度要求取得一个近似值。例如,将十进制小数0.2转换为二进制小数,需指定精度,如转换后保留小数点后4位,则(0.2)10 ≈(0.0011)2。
2.十进制转八进制或十六进制
用同十进制转二进制一样的方法,可将十进制数转换成八进制数或十六进制数,方法是分别采用“逐次除以8取余,逐次乘以8取整”或“逐次除以16取余,逐次乘以16取整”法。
(三)非十进制数之间的转换
两个非十进制数之间的转换方法可以先将被转换数转换为相应的十进制数,然后将十进制数转换为其他进制数。但由于二进制、八进制和十六进制之间存在着特殊关系,即81=23,161=24,因此使用下面的转换方法更容易。
1.二进制、八进制数之间的转换
由于1位八进制数相当于3位二进制数,因此,二进制数转换成八进制数,只需以小数点为界,整数部分按照由右至左(由低位向高位)、小数部分按照从左至右(由高位向低位)的顺序每3位划分为一组,最左面、最右面不足3位二进制数时用0补足。按表1-1,每3位二进制数分别用与其对应的八进制数码来取代,即可完成转换。而将八进制转换成二进制的过程正好相反。
【例1.6】 将(11001110.01010101)2转换成八进制数。
解:(011 001 110.010 101 010)2
↓ ↓ ↓ ↓ ↓ ↓
(3 1 6.2 5 2)8
【例 1.7】 将(374.625)8转换成二进制数。
解:(3 7 4.6 2 5)8
↓ ↓ ↓ ↓ ↓ ↓
(011 111 100.110 010 101)2
2.二进制、十六进制数之间的转换
由于十六进制的1位数相当于二进制的4位数,因此二进制同十六进制之间的转换就如同二进制同八进制之间的转换一样,只是4位一组,不足4位补0。所以将二进制数转换成十六进制数,整数部分从小数点由右往左每4位一组转换,若不够四位时,在最左面补0,补足4位。小数部分从小数点开始自左向右每4位一组进行转换,若不够4位时,在最右面补0,补足4位。
十六进制转换成二进制数:如将十六进制数转换成二进制数,只要将每一位十六进制数用4位相应的二进制数表示,即可完成转换。
【例 1.8】 将(11101110100101.1011011)2转换成十六进制数。
解:(0011 1011 1010 0101.1011 0110)2
↓ ↓ ↓ ↓ ↓ ↓
(3 B A 5.B 6)16
表1-1 二进制、八进制和十六进制之间的关系
三、数值型数据在计算机内的表示形式
计算机中的数据分为数值型和非数值型两大类。
数值型数据指可以参加算术运算的数据,例如(456)10、(1011.101)2等。
非数值型数据不参与算术运算。例如字符串“邮编:116044”“2的3倍等于6”等都是非数值数据。注意这两个例子中均含有数字,如116044、2、3、6,但它们不能也不需要参加算术运算,故仍属非数值数据。下面讨论数值型的二进制数的表示形式:
(一)机器数
在计算机中,因为只有“0”和“1”两种形式,所以数的正负,也必须用“0”和“1”表示。通常把一个数的最高位定义为符号位,用0表示正,1表示负,称为数符,其余位仍表示数值。把在机器内存放的正、负号数码化的作为一个整体来处理的二进制数称为机器数(或机器字),而把机器外部由正、负号表示的数称为真值数。
例:真值为(+1010011)B的机器数为01010011,存放在机器中,等效于+83。
需注意的是,机器数表示的范围受到字长和数据的类型的限制。字长和数据类型定了,机器数能表示的数值范围也就定了。例如,若表示一个整数,字长为8位,则最大的正数为01111111,最高位为符号位,即最大值为127。若数值超出127,就要“溢出”。
(二)带符号数的表示形式
在计算机中,带符号数可以用不同方法表示,常用的有原码、反码和补码。
(1)原码表示法:
一个机器数X由符号位和有效数值两部分组成。
设符号位为X0,X真值的绝对值[X]=X1X2…Xn,X的机器数原码表示为:
[X]原=X0X1X2…Xn;
当 X≥0时,X0=0(符号位为 0,表示符号为正);
当X<0时,X0=1(符号位为1,表示符号为负)。
采用原码的优点是简单易懂,与真值转换方便,用于乘除法运算十分方便。但是对于加减法运算就麻烦了,因为当两个同号数相减或两个异号数相加时,必须判断两个数的绝对值哪个大,用绝对值大的数减去绝对值小的数,而运算结果的符号则应取与绝对值大的数相同符号。要完成这些操作相当麻烦,还会增加运算器的复杂性。为了克服原码的缺点,引进了数的反码和补码表示方法。
(2)反码表示法:
负数的反码是原码符号位不动,其余各位取相反码。反码没有直接的用途,只是作为求补码的中间过程。正数的反码与原码相同。
(3)补码表示法:
负数的补码等于它的反码值再加1而得到的数。正数的补码表示与原码一样,[X]补=[X]原。
在补码中,0有唯一的编码:[+0]补=[-0]补=00000000,补码可以将减法运算转化为加法运算,即实现类似代数中的 x-y=x+(-y)的运算。补码的加减法运算规则:[X+Y]补=[X]补+[Y]补、[X-Y]补=[X]补+[-Y]补
总结:正数的原码,反码和补码相同,只有负数的有不同。真值+0和-0的补码表示是一致的,但在原码和反码表示中具有不同的形式。
四、数字化信息编码
数字化信息编码是把少量二进制符号(代码),根据一定规则组合起来,以表示大量复杂多样的信息的一种编码。一般来说,根据描述信息的不同可分为数字编码、字符编码、汉字编码等。
(一)数字编码
数字编码是用二进制数码按照某种规律来描述十进制数的一种编码。最简单最常用的是8421码,或称BCD码(Binary-Code-Decimal)。它利用四位二进制代码进行编码,这四位二进制代码,从高位至低位的位权分别为 23、22、21、20,即 8、4、2、1。并用来表示一位十进制数。下面列出十进制数符与 8421码的对应关系。
十进制数: 0 1 2 3 4 5 6 7 8 9
8421码: 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
根据这种对应关系,任何十进制数都可以同8421码进行转换。例如:
(二)西文字符编码(ASCⅡ码)
在计算机中,对非数值的文字和其他符号进行处理时,要对文字和符号进行数字化处理,即用二进制编码来表示。字符编码就是规定用怎样的二进制编码来表示文字和符号。
ASCⅡ码(American Standard Code of Information Interchange)是“美国标准信息交换代码”的缩写。该种编码后来被国际标准化组织ISO采纳,作为国际通用的字符信息编码方案。ASCⅡ码由基本ASCⅡ码和扩展ASCⅡ码组成。在计算机内部用一个字节(8位二进制数)存放一个ASCⅡ码,二进制位最高位是0的为基本ASCⅡ码,其范围是0~127,来表示128个不同的字符(因27=128);二进制位最高位是1的为扩展ASCⅡ码,其范围是128~255。ASCⅡ码中,每一个编码转换为十进制数的值被称为该字符的ASCⅡ码值。基本ASCⅡ表中有34个非图形字符(又称为控制字符),其余94个可打印字符,称为图形字符。这些字符按ASCⅡ码从小到大的顺序排列。其中,大写字母A的ASCⅡ码是65,小写字母a的ASCⅡ码是97,“0”的ASCⅡ码是48,空格的ASCⅡ码是32。ASCⅡ码表如表1-2所示。
表1-2 ASCⅡ码表
(三)汉字编码
汉字在计算机内也采用二进制的数字化信息编码。由于汉字的数量大,常用汉字也有几千个,显然汉字编码比ASCⅡ码表要复杂得多,用一个字节(8bit)是不够的,目前的汉字编码方案有二字节、三字节甚至四字节。在一个汉字处理系统中,输入、内部处理、输出对汉字的要求不同,所用代码也不尽相同。所以,汉字信息处理系统在处理汉字词语时,要进行输入码、国标码、内码、字型码等一系列的汉字代码转换。
1.国标码
1981年国家颁布了《中华人民共和国国家标准信息交换汉字编码》(GB 2312-1980标准),这种编码称为国标码。在国标码字符集中共收录了汉字和图形符号7445个,其中一级汉字3755个,二级汉字3008个,西文和图形符号682个。
国标GB 2312-1980规定,所有的国标汉字与符号组成一个94×94的矩阵。在此方阵中,每一行称为一个区(区号分别为01~94)、每个区内有94个位(位号分别为01~94)的汉字字符集。
汉字与符号在方阵中的分布情况如下:
1~15区为图形符号区
16~55区为一级汉字、常用二级汉字区
56~87区为不常用的二级汉字区
88~94区为自定义汉字区
2.汉字输入码与机内码
计算机处理汉字时,由于汉字具有特殊性,因此汉字输入、存储、处理及输出过程所使用的代码均不相同。其中包含用于汉字输入的输入码、机内存储和处理的机内码、用于显示及打印的字模点阵码(字形码)。
(1)输入码(外码):汉字由各种输入设备以不同方式输入计算机所用到的编码。每一种输入码都与相应的输入方案有关。根据不同的输入编码方案不同,一般可分类为:数字编码(如区位码)、音码(如拼音编码)、字形码(如五笔字型编码)及音形混合码等。
(2)机内码:汉字系统中对汉字的存储和处理使用了统一的编码,即汉字机内码(机内码、内码)。机内码与国标码稍有区别,如果直接用国标码作内码,就会与ASCⅡ码冲突。在汉字输入时,根据输入码通过计算或查找输入码表完成输入码到机内码的转换。如果用十六进制表示,就是把汉字国标码的每个字节都加80H(即二进制数 10000000)。如汉字国标码(H)+8080(H)=汉字机内码(H)。
3.汉字库与汉字字形码
字形码是汉字字库中存储的汉字字形的数字化信息,用于汉字的显示和打印。目前,汉字字形的产生方式大多是用点阵或矢量函数表示。点阵表示方式是以点阵的方式形成汉字图形,缺点是字形放大后产生锯齿,效果差。而矢量表示方式解决了点阵字形放大后的锯齿问题,TrueType技术就是汉字的矢量表示方式。
一个汉字的点阵有多种表示:如 16×16、24×24、32×32、48×48等。一个汉字字形中行数、列数分得越多,描绘的汉字也越细微,但占用的存储空间也就越多。如图1-41所示是一个16×16点阵的汉字“中”,用“1”表示黑点、“0”表示白点,则黑白信息就可以用二进制数来表示。由于每一个点的信息都要用一位二进制数来表示,则一个16×16的汉字字模要用32个字节来存储。国标码中的6763个汉字及符号要用261696字节存储。以这种形式存储所有汉字字形信息的集合称为汉字字库。可以看出,随着点阵的增大,所需存储容量也很快变大,其字形质量也越好,但成本也越高。
图1-41 16×16汉字点阵“中”
五、任务解析
在计算机内,西文字符是以ASCⅡ码存储的,占1个字节,汉字在计算机内是以内码存储的,占2个字节。如果存储26个英文字母,需要26个字节。
32×32点阵字库中每一个汉字共有1024个点(32×32),每个点都用一个二进制位来存储,共需要1024个二进制位,1024b=128Byte,所以需要128个字节存储。
50M带宽是指在1秒内能通过的最大比特位数为50Mbps(b,比特位bit),50M宽带的理论最高下载速率是50×1024/8=6400KB/s(KB为千字节)。如果要下载1个有512万个汉字的文本文件,512万个汉字的所占的字节数为512×10 000×2B=10 240 000B=10 000KB,所以,下载512万个汉字至少需要10 000KB/6400≈1.563秒时间。
(王宏伟)