1.2 数制与编码
电子设备中表示数据的方法有不同形式,模拟设备操作的是连续变化的数据,数字设备使用离散的、不连续的数字(如0、1)工作。计算机使用电脉冲信号来表示数据。
1.2.1 计算机中常用的数制
日常生活中,人们接触最多的数值表示方法是十进制,满十进一。此外,常见的还有六十进制(1小时为60分)、十二进制(1年有12个月)等。在计算机中,基本的数制是二进制,只有0和1两个数字,满二进一。计算机数据都是由晶体管通或断的状态,即电信号高、低两种电平来表示。高电平时表示为“1”,低电平时表示为“0”。
在十进制数中,从右向左分别为个位、十位、百位……,每位上数字的基值分别为1、10、100……,称为位权,十进制数的值即为各位中数值乘以对应位权的总和。例如:
(1234)10=1×103+2×102+3×101+4×100=1×1000+2×100+3×10+4×1=(1234)10
对应地,二进制数,从右向左各位的位权分别为1、2、4、8……,二进制数的值即为各位数值乘以对应的位权的总和。例如:
(1010)2=1×23+0×22+1×21+0×20=1×8+1×2=8+2=(10)10
由于二进制数表示数据的位数太多,在书写文档或设计程序时通常用八进制(以3个二进制位为一位,可用数字为0~7)、十六进制(以4个二进制位为一位,可用数字为0~9及A~F表示数字0~15)表示。
二进制每一位数值“1”或“0”称作bit(位)。bit是计算机可以识别的最小数据单位。1和0以不同的次序组合起来表示计算机内的各种数据。大部分计算机的编码都是以8位为一个单位来进行数据的存储或传输,把这8个位合称1个Byte(字节,B)。
1.2.2 数据的编码
1.字符编码
计算机中的数据可以分为数值型数据与非数值型数据。其中数值型数据就是常说的“数”(如整数、实数等),它们在计算机中是以二进制形式存放的。而非数值型数据与一般的“数”不同,通常不表示数值的大小,而只表示字符、汉字或图形等非数值的信息,这些信息在计算机中也是以二进制形式来表示的。
(1)ASCII码编码:为了便于计算机识别与处理,在计算机中使用二进制数来表示字符,通常称之为字符的二进制编码。目前,使用最多的是ASCII码字符集,意思为“美国标准信息交换标准代码”。ASCII码是用7位二进制数表示一个字符,共能表示27=128个不同的字符,包括了26个英文大写字母、26个英文小写字母,数字符号0~9、算术与逻辑运算符号、标点符号等。在一个字节(8位二进制数)中,ASCII码用了七位,最高一位空闲,常用来作为奇偶校验位。另外,还有扩展的ASCII码,它用8位二进制数表示一个字符的编码,可表示28=256个不同的字符。
(2)国际统一编码:为了统一各种语言字符的表达方式,国际上又制定了国际统一编码(Unicode编码)。在这种编码的字符集中,一个字符的编码占用2个字节,一个字符集可以表示的字符比ASCII码字符集所表示的字符扩大了一倍。
2.汉字编码
为使计算机可以处理汉字,也需要对汉字进行编码。计算机进行汉字处理的过程实际上是各种汉字编码的转换过程。常用的汉字编码简介如下:
(1)汉字信息交换码:它的全称为“信息交换用汉字编码字符集”,也称为国标码集。国标码集共收集了6763个汉字,682个数字、序号、拉丁字母等图形符号。国标码集规定,一个汉字的编码用两个字节表示。国标码集规定,全部国标汉字及符号组成94×94的矩阵,在这个矩阵中,每一行称为一个“区”,每一列称为一个“位”。这样,就组成了94个区(01~94区),每个区内有94个位(01~94)的汉字字符集。
区码和位码简单地组合在一起(即两位区码居高位,两位位码居低位)就形成了“区位码”。区位码可唯一确定某一个汉字或汉字符号,反之,一个汉字或汉字符号都对应唯一的区位码,如汉字“啊”的区位码为“1601”(即在16区的第1位)。
(2)汉字输入码:它是为使用户能够使用西文键盘输入汉字而编制的编码,也称外码。目前,汉字主要是经标准键盘输入计算机的,所以汉字输入码都是由键盘上的字符或数字组合而成。汉字输入码有许多种不同的编码方案,包括:音码,如全拼输入法的编码;形码,如五笔字型输入法的编码;音形码,如自然码输入法的编码;数字码,等等。
(3)汉字机内码:它是为了能够在计算机内部对汉字进行处理、存储的汉字编码。不论用何种输入码,输入的汉字在机器内部都要转换成统一的汉字机内码,然后才能在计算机内传输、处理。根据汉字信息交换码,一个汉字的机内码也用2个字节存储。因为ASCII码是西文的机内码,为不使汉字机内码与ASCII码发生混淆,就把汉字每个字节的最高位置为1,作为汉字机内码。
图1-2-1 “工”字16×16点阵字形
(4)汉字输出码:也称汉字字形码。汉字是一种象形文字,每一个汉字都是一个特定的图形,它可以用点阵来描述。例如,如果用16×16点阵来表示一个汉字(如图1-2-1所示),则该汉字图形由16行16列共256个点构成,这256个点需用256个二进制的位来描述。约定当二进制位值为“1”表示对应点为黑,“0”表示对应点为白。一个16×16点阵的汉字需要2×16=32个字节用于存放图形信息,这就构成了一个汉字的图形码,所有汉字的图形码就构成了汉字字库。
当用某种汉字输入法将一个汉字输入到计算机之后,汉字管理模块立即将它转换为2个字节的国标码,同时将国标码每个字节的最高位设置为“1”,作为汉字的标志,将国标码转换成汉字内码。根据内码对应到字库中的一个汉字图形码,以输出字形。