计算机应用基础项目化教程
上QQ阅读APP看书,第一时间看更新

任务三 计算机的编码

任务描述

在冯·诺依曼计算机中,所有信息均采用二进制编码,也就是计算机内部表示信息、处理信息均采用二进制编码形式,称为数字化信息。信息必须先转换成数字化信息计算机才可以处理,目前计算机可以处理的信息包括:数字、字符、文字、图形、图像、声音、动画等,然而这些信息是如何用二进制形式来表示的呢?或者说如何给这些信息编码呢?本任务对数字、字符、文字如何转换成数字化信息作简单的介绍。

任务实施

1.数的编码

数制是指用一组固定的数码和统一的规则来表示数值的方法。日常中采用的数制是十进制,除此之外有时也用到八进制和十六进制,而在计算机内部采用的数制是二进制。因此,数的编码就是将常用数制转换成二进制数。虽然这些数制各不相同,但是它们表示数值的方法却是相似的,都是用若干个数码的组合来表示数值,所表示数值的大小等于各数码所代表数值之和。换言之,任何一种数制表示的数值都可以写成各数码所代表数值之和(称为通式)。例如,用数码an…a0组合表示数值N,则通式为N=an×mn+an-1mn-1+…+a0×m0

其中,m是数制基数,也就是数制所使用数码的个数,mi是第i项数码ai的权值,数值N中最右边数码a0是0项,最左边数码an是n项,数码组合中各数码所代表数值等于数码与其权值乘积。

(1)十进制

数码:十进制用来表示数的数码有10个:0、1、2、3、4、5、6、7、8、9。

基数:十进制的基数是10。

权值:第i项数码ai的权值是10i

通式:N=an×10n+an-1×10n-1…+a0×100

例如:(128)10=1×102+2×101+8×100

(2)八进制

数码:八进制用来表示数的数码有8个:0、1、2、3、4、5、6、7。

基数:八进制的基数是8。

权值:第i项数码ai的权值是8i

通式:N=an×8n+an-1×8n-1…+a0×80

例如:(200)8=2×82+0×81+0×80=(128)10

(3)十六进制

数码:十六进制用来表示数的数码有16个:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。

基数:十六进制的基数是16。

权值:第i项数码ai的权值是16i

通式:N=an×16n+an-1×16n-1…+a0×160

例如:(80)16=8×161+0×160=(128)10

(4)二进制

数码:二进制用来表示数的数码有2个:0、1。

基数:二进制的基数是2。

权值:第i项数码ai的权值是2i

通式:N=an×2n+an-1×2n-1…+a0×20

例如:(10000000)2=1×27+0=(128)10

由此可得,二进制、八进制、十六进制按通式展开即可转换成十进制。

2.十进制转换成二进制、八进制、十六进制

十进制转换成二进制(或八进制、十六进制)采用的方法是2(或8、16)除取余法。即用十进制数(这里指整数)除以基数2(或8、16),若商不为0,则继续用商除以基数2(或8、16),直到商为0,最后将余数自下而上排列出来。

例如:将(128)10转换成二进制数是(10000000)2

方法如下:

所以,(128)10=(10000000)2

例如:将(128)10转换成八进制数是(200)8。方法如下:

例如:将(128)10转换成十六进制数是(80)16。方法如下:

3.二进制、八进制、十六进制之间转换

二进制、八进制、十六进制之间转换可以先将某进制数转换为十进制数,然后将得到的十进制数转换为另一进制数,但是这种转换方法很复杂。其实二进制、八进制、十六进制之间的转换可以通过建立二进制与八进制、二进制与十六进制数码之间的对应关系来解决。由于二进制只有0和1两个数码,它是用若干个0和1数码组合来表示数值的,数码组合的总数与组合中的数码个数有关,数码组合的总数等于2n(n是组合中的数码个数),即:组合中的数码个数是1(2,3,4,…,7,…)时,数码组合的总数等于2(4,8,16,…,128,…)。根据这个规律,表示八进制(或十六进制)的8(或16)个数码,只需要用二进制数码3(或4)个,由此建立如下两个关系对应表(见表1-1和表1-2),根据关系对应表,就可以完成二、八、十六进制数之间的转换。

表1-1 二进制数与八进制数对应表

(1)二进制数和八进制数之间的转换

由二进制数转换为八进制数,采用“三位一并法”,就是以小数点为基点,向左右两个方向将每三位二进制数并为一组,不足三位的用0补齐,然后按表1-1以八进制数表示。

例如:将(10110100.10111)2转换成八进制数。

首先按“三位一并法”对10110100.10111进行分组,然后按表1-1找出与之对应的八进制数。

010 110 100 . 101 110

 2  6  4 .  5  6

得到转换结果为(10110100.10111)2=(264.56)8,反之,由八进制数转换为二进制数为上述过程的逆过程,采用“一分为三法”。(转换举例略)

(2)二进制数和十六进制数之间的转换

由二进制数转换为十六进制数,采用“四位一并法”,就是以小数点为基点,向左向右两个方向将每四位二进制数并为一组,不足四位的用0补齐,然后按表1-2关系以十六进制数表示。

例如:将(10110100.10111)2转换成十六进制数。

首先按“四位一并法”对10110100.10111进行分组,然后按表1-2找出与之对应的十六进制数。

1011 0100 . 1011 1000

 B   4 .  B  8

得到转换结果为:(10110100.10111)2=(B4.B8)16,反之,由十六进制数转换为二进制数为上述过程的逆过程,采用“一分为四法”。(转换举例略)

表1-2 二进制数与十六进制数对应表

4.字符的编码

字符的编码就是指按照特定编码规则建立字符与二进制编码一一对应的关系,也就是说在特定编码规则下,用一个二进制编码表示一个字符,一般地,字符与二进制编码并没有直接的关系,字符对应哪一个二进制编码完全可以人为规定,为了便于信息交换,人们建立了字符的统一编码标准,目前英文字符是以ASCII码为标准编码,汉字采用GB 2312为标准编码。

ASCII码是计算机系统中广泛使用的一种字符编码,是英文American Standard Code for Information Interchange(美国信息交换标准编码)的缩写。该编码已经被国际标准化组织采纳,成为国际间通用的信息交换标准编码。目前国际上流行的是ASCII编码的七位版本,即用一个字节(8个二进制数码为一个字节)的低七位表示一个字符,ASCII码的编码规则是将需要编码的字符:0~9共10个数码,52个英文字母(区分大小写),32个通用符号,34个控制符号,一共有27=128个,按空格、数字、大写字母、小写字母的先后顺序排成一个16×8的矩阵,如表1-3所示。

其中,列号为0,1,2,3,4,5,6,7(对应表1-1的二进制数为000,001,010,011,100,101,110,111),行号为0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F(对应表1-2的二进制数为0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111),表中字符对应的列号为高三位,行号为低四位,连起来共七位二进制数作为该字符的ASCII码,最高位则(设为0)作为检验位,用于传输过程检验其正确性。

表1-3 ASCII码表

5.汉字编码

计算机在处理汉字时要经过输入、内部处理及输出3个环节,各个环节采用的是不同的编码,汉字在这一过程中的代码转换如图1-2所示。

图1-2 汉字代码转换

(1)输入码

输入码又称外码,是指利用键盘的键名组合给汉字编码,输入码便于利用键盘输入汉字。

(2)国标码

我国于1981年5月颁布的《信息交换用汉字编码字符集基本集》(GB 2312—1980)是汉字编码的国家标准,称为国标码。一个汉字的国标码用2字节表示,第一字节表示汉字所在的行,第二字节表示汉字所在的列,可对128×128=16384个汉字编码,但为了与标准ASCII码兼容,每个字节中都不能再用32个控制功能码和码值为32的空格以及码值为127的操作码,所以每个字节只能有94个编码,也就是只可对94×94=8836个汉字编码。

GB 2312—1980代码表共收录了6763个常用汉字,根据这些汉字使用频率的高低,又将它们分成两部分,一部分称为一级汉字共3755个,即最常用的汉字,在代码表中按汉语拼音字母顺序排列,同音则按笔画顺序排列;另一部分称为二级汉字共3008个,为次常用的汉字,在代码表中按部首和笔画顺序排列,另外还收录了一些数字符号、图形符号、外文字母等总计7445个字符,将这7445个字符按94行×94列排列在一起,组成GB 2312—1980字符集编码表(表1-4给出了GB 2312—1980局部代码表),行与列分别用七位二进制码表示,其值都从0100001到1111110(即每个字节的编码取值范围为十进制数33~126,0~32用于32个控制功能和码值为32的空格编码),其范围对应十六进制为21~7E。

表中的每一个汉字都对应于唯一的行号(称为区号)和列号(称为位号),将区号位号相连就组成该汉字的区位码,将区位码的区号和位号分别由十进制转换成对应的十六进制数,然后加上十六进制数2020H(H表示2020为十六进制数码),就得到对应的国标码。例如“啊”字的区位码是1601,分别将区号和位号转换成对应的十六进制数得1001H,再加上2020H就得到“啊”字的国标码为3021H。国标码每个字节的最高位为“0”,一般由十六制数表示。

表1-4 GB 2312—1980代码表(局部)

(3)机内码

机内码是计算机内表示汉字的基本编码,计算机对汉字进行识别、存储、处理和传输所用的是机内码,机内码也是双字节编码,将国标码两个字节的最高位都置为1,也就是将十六进制的国标码加上8080H(8080H对应的是1000000010000000),即可转换成汉字的机内码,如“大”字的区位码为2083,国标码为3473H,机内码为3473H+8080H=B4F3H。将B4F3H化为二进制数得:1011010011110011,这就是在计算机中实际使用的机内码的二进制形式。计算机信息处理系统就是根据字符编码的最高位是1还是0来区分汉字字符和ASCII码字符。

(4)字形码

字形码是表示汉字字形信息(汉字的结构、形状、笔画等)的编码,用来实现计算机对汉字的输出(显示或打印)。由于汉字是方块字,因此字形码最常用的表示方式是点阵形式,有16×16点阵、24×24点阵、48×48点阵等。16×16点阵的含义为:用256(16×16=256)个点来表示一个汉字的字形信息。每个点有“亮”或“灭”两种状态,用一个二进制数码1或0来表示。因此,存储一个16×16点阵的汉字需要256个二进制位,共32字节。