计算机中信息编码 一、 计算机中数的表示 我们平常使用的十进制数,在计算机中则采用二进制数。 1.进位计数制的概念 进位计数制,是指按某种进位原则进行订数的一种方法。数的表示涉及到两个主要问题:权和基数。权是一个与相应数位有关的常数,它与该数位的数码相乘后,就可得到该数位的数码代表的值。一个数码处理不同位置时,所代表的数值是不同的,因为它拥有的权不同。基数是一个正整数,它等于相邻数位上权的比。对任意一种进制的数,基数和能选用的个数相等,能选用的最大数码要比基数小1,每个数位能表示的最大数值是最大数乘以该闰具有的权,当超过这个数值时要向高位进位。 以十进制数为例。对整数部分,每一位的权从右到左依次为100,101,102,103,即平常所说的个、十、百、千、万等。对小数部分,每一位的权从左到右依次为10-1,10-2,10-3,10-4,等,即平常所说十分之一、百分之一、千分之一、万分之一。看以看出,相邻两数位权的比是10,即10的基数是10,各数位允许选用的数码为0,1,2,,其计数规则是“逢十进一”。对任意一个十进制数,都可以用一个多项形式来表示,其中每一项表示相应数位代表的数值。例如:十进制数321.5可以表示成: 321.5=3×102+2×101+1×100+5×10-1 同样的道理,对一个R进制数N可表示成: (N)R=an*Rn+an-1*Rn-1+…a1*R1+a0*R0+an-1*Rn-1+…+a-m*R-m 按照以上的讨论,对二进制数来说,应符合以下几点: (1)能选用的数码的个数等于基数2,即各数位只允许是0和1; (2)相邻两数位的比为2; (3) 每个数码代表的数值,等于该数码乘以2的整次幂,幂的大小取决于该数所在位置; (4)计数规则是“逢二进一”。 常用进制的基数和所用的数字符号
2.二进制的特点和运算 (1)二进制数的特点: 在计算机中容易实现。在二进制数中,只需要0和1两个数码就可以表示任意数。这样,每一位二进制数可以用具有两种不同状态的电路或元件表示。如电平的高低,晶体管的导通与截止,可分别用来表示0和1。 运算规则简单。由于数的运算规则随基数的增大而变复杂,对R进制的数,在做加法运算时需要记住R(R+1)/2条规则,乘法也一样。而二进制数由于在所有的进位记数制中基数最小,因而规则也最少。 工作可靠。表示二进制的元件具有两种状态,一般都有质的区别,如电平的正和负,晶体管的导通和截止等,它可以减少外部因素对信息的干扰。 适合逻辑运算。在计算机的非数值计算应用中,存在着大量的逻辑运算。二进制数的0和1正好与逻辑代数中的“真”和“假”两种逻辑值相对应,为计算机在非数值计算领域的应用提供了强有力的支持。
(1)二进制算术运算规则 加法:0+0=0 0+1=1+0=1 1+1=0 减法:0-0=0 1-0=1 1-1=0 0-1=1(有借位) 乘法:0*0=0 0*1=1*0=0 1*1=1 1. 不同数制之间的互相转换 (1)十进制数转换成二进制数 十进制数转换成二进制数时,整数和小数的转换方法是不一样的。所以,对于一个十进制数,若既有整数部分又有小数部分,则要分别进行转换,然后再把两部分拼起来。 整数的转换规则:连除以2,直到商为0,从下而上取其余。 例1:将十进制数34转换为二进制数 2 34 ……余0 2 17 ……余1 2 8 ……余0 2 4 ……余0 2 2 ……余0 2 1 ……余1 0 所以(34)10=(100010)2 小数的转换规则:连乘以2,直到积为0,从上而下取其整。 例2:将十进制小数0.625化为二进制小数。 0.6 2 5 × 2 1.2 5 0 整数部分为1 0.2 5 0 余下的小数部分 × 2 0.5 0 0 整数部分为0 0.5 0 0 余下的小数部分 × 2 1.0 0 0 整数部分为1 0.0 0 0 余下小数部分为0 结束 所以(0.625)10=(0.101)2 必须指出,一个十进制小数不一定能完全准确地转换成二进制小数。在这种情况下,可以根据精度要求计算到小数点后某一位为止。 (2) 十进制数转换成十六进制数 十进制转换成十六进制与十进制转换成二进制的方法类似,只不过其权由2变成了16,下面是两个例子。 例3:将十进制数1245化为十六进制 16 19356 ……余 C 16 1209 ……余 9 16 75 ……余 B 16 4 ……余 4 0 所以,(19356)10=(4B9C)16 例4:将十进制小数0.35625转换十六进制数。 0.3 5 6 2 5 × 1 6 5.7 0 0 0 0 0.7 0 0 0 0 × 16 1.1 2 0 0 0 0.1 2 0 0 0 × 1 6 1.9 2 0 0 0 0.9 2 0 0 0 × 1 6 14.7 2 0 0 0 所以,(0.35625)10≈(0.511E)16 (1)二进制与十六制互相转换 二进制数与十六进制数之间的转换比较简单。一位十六进制数对应四位二进制数,互换时只有以四位二进制数为一个组,每个组作相应变换即可。要注意的是,分组时要以小数点为基准,整数从小数点开始从右向左每四位划分为一组,而小数则从小数点开始从左向右每四位划分为一组。如果最后一组不足四位,可以加0补齐。 例5:(110001101.10)2=( 18D.8)16 ,(23EF)16=(10001111101111)2 0001 1000 1101 .1000 2 3 E F ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 1 6 D .8 10 0011 1110 1111 (2)二、十六进制转换成十进制数 用第n位乘以权的n-1次方,求其和。 11000101.01B=1×27+1×26+0×25+0×24+0×23+1×22+0×21+1×20+0×2-1+1×2-2 =197.25 2DA3.4H=2×163+D×162+A×161+3×160+4×16-1=8192+3072+160+3+0.25=11427.25 一、 英文字符编码 在计算机中使用的字符主要有英文字母、标点符号、运算符号等,这些所有的字符也是以二 进制的形式表示的,但是和数值不一样,字符与二进制之间没有必然的对应关系。这些字符的二进制编码只能是人为编制的,目前二进制编码有多种,如国际标准代码组织的编码ISO、美国国际商业机器公司(IBM公司)的扩充二~十进制编码EBCDIC等。 现在使用最普遍的编码是美国国家标准信息交换码即ASCII码(American National Standard Code for Information Interchange)。ASCII码是用7位二进制数进制编码的,能表示27=128个字符,这些字符包括26个英文字母(大小写)、0~9十个阿拉伯数字、32个专用符号 (!、#、$、%、^、*、(、)、<、>等)、34个控制字符。 例如,英文字母A 的ASCII编码是1000001,a的ASCII编码是1100001,数字0的ASCII编码是110001。需要注意的是在ASCII码表中字符的顺序是按ASCII码值从小到大排列的,这样便于记住常用字符的ASCII码值。为了便于记忆,也可以记住相应的ASCII码十进制值或十六进制值。 表1-1 ASCII码字符表
三、 计算机中汉字的表示 计算机中汉字的表示也是用二进制编码,同样是人为编码的。根据应用目的的不 同,汉字编码分为外码、交换码、机内码和字形码。 1.外码(输入码) 外码也叫输入码,是用来将汉字输入到计算机中的一组键盘符号。英文字母只有26个,可以把所有的字符都放到键盘上,而使用这种办法把所有的汉字都放到键盘上,是不可能的。所以汉字系统需要有自己的输入码体系,使汉字与键盘能建立对应关系。目前常用的输入码有拼音码、五笔字型码、自然码、表形码、认知码、区位码和电报码等,一种好的编码应有编码规则简单、易学好记、操作方便、重码率低、输入速度快等优点,每个人可根据自己的需要进行选择。在后面的章节中,重点介绍智能全拼输入法和五笔字型输入法。 2.交换码 计算机内部处理的信息,都是用二进制代码表示的,汉字也不例外。而二进制代码使用起来是不方便的,于是需要采用信息交换码。我国标准总局1981年制定了中华人民共和国国家标准GB2312--80《信息交换用汉字编码字符集--基本集》,即国标码。国标码字符集中收集了常用汉字和图形符号7445个,其中图形符号682个,汉字6763个,按照汉字的使用频度分为两级,第一级为常用汉字3755个,第二级为次常用汉字3008个。为了避开ASCII字符中的不可打印字符0100001--1111110(十六进制为21-7E),国标码表示汉字的范围为2121--7E7E(十六进制)。 区位码是国标码的另一种表现形式,把国标GB2312--80中的汉字、图形符号组成一个94×94的方阵,分为94个“区”,每区包含94个“位”,其中“区”的序号由01至94,“位”的序号也是从01至94。94个区中位置总数=94×94=8836个,其中7445个汉字和图形字符中的每一个占一个位置后,还剩下1391个空位,这1391个位置空下来保留备用。所以给定“区”值和“位”值,用四位数字就可以确定一个汉字或图形符号,其中前两位是 “区”号。后两位是“位”号,如“普”字的区位码是“3853”,“通”字的区位码是“4508”。区位码编码的最大优点是没有重码,但由于编码缺少规律,很难记忆。使用区位码的主要目的是为了输入一些中文符号或无法用其它输入法输入的汉字、制表符以及日语字母、俄语字母、希腊字母等。94个区可以分为五组: 01--15区:是各种图形符号、制表符和一些主要国家的语言字母,其中01--09区为标准符号区,共有682个常用符号。 10--15区:为自定义符号区,可留作用户自己定义。 16--55区:是一级汉字区,共有3755个常用汉字,以拼音为序排列。 56--87区:是二级汉字区,共有3008个次常用汉字,以部首为序排列。 88--94区:自定义汉字区,可留作用户自己定义。 3.机内码 根据国标码的规定,每一个汉字都有了确定的二进制代码,但是这个代码在计算机内部处理时会与ASCII码发生冲突,为解决这个问题,把国标码的每一个字节的首位上加1。由于ASCII码只用7位,所以,这个首位上的“1”就可以作为识别汉字代码的标志,计算机在处理到首位是“1”的代码时把它理解为是汉字的信息,在处理到首位是“0”的代码时把它理解为是ASCII码。经过这样处理后的国标码就是机内码。 汉字的机内码、国际码和区位码之间的关系是: (汉字机内码前两位)16=(国标码前两位)16+80H=(区码)16+A0H (汉字机内码后两位)16=(国标码后两位)16+80H=(区码)16+A0H 把用十六进制表示的机内码的前两位和机内码的后两位连起来,就得到完整的用十六进制表示的机内码。在微机内部汉字代码都用机内码,在磁盘上记录汉字代码也使用机内码。 4.汉字的字形码 字形码是汉字的输出码,输出汉字时都采用图形方式,无论汉字的笔画多少,每个汉字都可以写在同样大小的方块中。为了能准确地表达汉字的字形,对于每一个汉字都有相应的字形码,目前大多数汉字系统中都是以点阵的方式来存储和输出汉字的字形。所谓点阵就是将字符(包括汉字图形)看成一个矩形框内一些横竖排列的点的集合,有笔画的位置用黑点表示,没笔画的位置用白点表示。在计算机中用一组二进制数表示点阵,用0表示白点,用1表示黑点。一般的汉字系统中汉字字形点阵有16×16、24×24、48×48几种,点阵越大对每个汉字的修饰作用就越强,打印质量也就越高。通常用16×16点阵来显示汉字,每一行上的16个点需用两个字节表示,一个16×16点阵的汉字字形码需要2×16=32个字节表示,这32个字节中的信息是汉字的数字化信息,即汉字字模。下面以“口”为例看看16×16点阵字形是怎样存放的(如图3--1)。 如果我们把这个“口”字图形的“.” 处用“0”代替,就可以很形象地得到“口”的字形码:0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 3FFAH 2004H 0000H 0000H。计算机要输出“口”时,先找到显示字库的首址,根据“口”的机内码经过计算,再去找到“口”的字形码,然后根据字形码(要用二进制)通过字符发生器的控制在屏幕上进行依次扫描,其中二进制代码中是“0”的地方空扫,是“1”的地方扫出亮点,于是就可以得到“口”的字符图形。 字模按构成字模的字体和点阵可分为宋体字模、楷体字模等等, 这些是基本字模。基本字模经过放大、缩小、反向、旋转等交换可以得到美术字体,如长体、扁体、粗体、细体等等。汉字还可以分为简体和繁体两种,ASCII 字符也可分为半角字符和全角字符。汉字字模按国标码的顺序排列,以二进制文件形式存放在存储器中,构成汉字字模字库,亦称为汉字字形库,称汉字库。 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . . . 1 . . 2 . . 1 1 1 1 1 1 1 1 1 1 1 1 . . 3 . . 1 . . . . . . . . . . 1 . . 4 . . 1 . . . . . . . . . . 1 . . 5 . . 1 . . . . . . . . . . 1 . . 6 . . 1 . . . . . . . . . . 1 . . 7 . . 1 . . . . . . . . . . 1 . . 0 . . 1 . . . . . . . . . . 1 . . 1 . . 1 . . . . . . . . . . 1 . . 2 . . 1 . . . . . . . . . . 1 . . 3 . . 1 . . . . . . . . . . 1 . . 4 . . 1 1 1 1 1 1 1 1 1 1 1 1 . . 5 . . 1 . . . . . . . . . . 1 . . 6 . . . . . . . . . . . . . . . . 7 . . . . . . . . . . . . . . . . 图1-6 “口”字的16×16点阵字形图
按照汉字库的存放和使用情况可划分为软字库和硬字库。软字库是汉字字库文件存放在软盘或硬盘中,大多数微机在安装汉字系统时把汉字字库存储在硬盘上,一般提供16×16点阵和24×24点阵字库,软字库可分为RAM字库、磁盘字库、分级字库三种: (1)RAM字库 系统启动后把磁盘上汉字库调入内存RAM中驻留的字库,称为RAM字库,由于汉字数量很大,需要的内存空间也就很多,仅16×16点阵字库,就要占用261696字节。 (2)磁盘字库 高点阵的汉字库占用空间很大,内存一般放不下,于是常驻留在硬盘上,形成磁盘字库,例如CCDOS中用的24×24点阵字库及排版印刷系统中用的32×32以上点阵字库均为磁盘字库。这种字库不占内存,但操作速度慢。 (3)分级字库 分级字库是把RAM字库与磁盘字库相结合的方案,将汉字字库分为两部分,一部分驻留内存,另一部分驻留外存。通常把使用频度高的一级字库放在内存,使用较少的二级字库放在外存,这样即保证了速度,又节省了内存。 硬字库是把字库固化在ROM或EPROM中,做成字库插件板,插在主机的插槽中,也称汉卡。标准化了的点阵字模可固化在ROM中,非标准化的汉字点阵字模,则用写入器固化在EPROM中,以便改写。汉卡可看作一个外部设备,点阵信息从并行口读入,读取速度快,且不占用主存空间,随着ROM集成度的提高, 使价格下降,使用硬字库的用户将越来越多。 以上简单地介绍了汉字系统怎样输入、处理和输出汉字的问题。这个问题解决了,就可以把汉字同ASCII码一样作为计算机的一种信息资源,也就是可以在这样的中文系统下共享西文软件资源。
|