第3 章信息编码与数据表示 计算机最基本的功能是进行数据的计算和处理,这些数据包括数值、文字、图形、图 像、声音、视频等数据形式。由于计算机内部只能表示、识别、存储、处理和传送二进制数, 所以各种数据信息都必须经过二进制数字化编码后,才能在计算机中进行处理。将各种 不同类型的数据信息转换为二进制代码的过程称为信息编码。不同类型的信息具有不同 的编码方式。 3.1 计算机中的数制 计算机中采用二进制数,为了书写和阅读的方便,引入了八进制数和十六进制数。而 在日常生活及数学中,人们习惯使用十进制数。在人和计算机交换信息时,输入的数据或 输出的结果是十进制数的,但在计算机存储、处理、传输信息时,二进制数工作得更好,这 就需要在各种数值之间进行相互转换。虽然这种转换过程由计算机系统自动完成,但还 是有必要了解各种数制的特点及其转换过程。 3.1.1 计算机中采用二进制数 现代计算机存储和处理的信息是以0和1的模式编码的,这些数字称为位(bit)。它 们只是符号,其意义取决于正在处理的应用:有时用来表示数值,有时表示字母表中的字 符,有时表示标点符号,有时表示图像,有时表示声音。 单个的位不是非常有用的,然而,当把位组合在一起,加上某种解释,即赋予了它们含 义,就能够表示任何有限集合的元素。例如,一个二进制数字系统能够用来表示数值。通 过使用标准的字符编码,能够对字母表中的字符和标点符号进行编码。 3.1.2 常用数制及其特点 按进位的原则进行计数称为进位计数制,简称“数制”。在计算机中常用的数制有二 进制数、八进制数、十进制数、十六进制数。下面介绍数制的基本概念及常用数制的特点。 1.数码 每一种数制都使用一组固定的数学符号来表示数字的大小,该数学符号称为“数码”。 不同进制数所使用的数码及数码的个数是不同的。例如,二进制的数码有2个:0和1。 2. 基数 不同进制数所使用的数码的个数,称为该数制的基数。一般来说,基数是几就是几进 制。进制的规则是“逢几进一”。例如,十进制就是“逢十进一”,二进制就是“逢二进一”。 表3-1展示了常用数制的基本要素及其表示方法。 表3- 1 常用数制的基本要素及其表示方法 数制基数进制规则位权数码表示 二进制2 逢二进一2i 0、1 B 八进制8 逢八进一8i 0,1,2,3,4,5,6,7 O 十进制10 逢十进一10i 0,1,2,3,4,5,6,7,8,9 D 十六进制16 逢十六进一16i 0,1,…,9,A,B,C,D,E,F H 其中,十六进制数中:A表示10,B表示11,C表示12,D表示13,E表示14,F表 示15 。 3. 位权 在一个数中,每个数码表示的值不仅取决于数码本身,还与它所处的位置有关。例 如,十进制数123.可以表示成如下形式: 45, 123.45=1×102+2×101+3×100+4×10-1+5×10-2 式中102、101、100、10-1、10-2称为各位数字的权。可以看出,各位数字只有乘上它们 的权值,才是它的实际值,如上例中最左边的数字1,乘上102,才是它的实际值100 。上式 称为十进制数123.二进制数的 45 的按权展开式。十进制数的权值都是10 的若干次幂, 权值都是2的若干次幂。 一般地,可以将一个数按照“基数”和“权”展开为如下形式: n D=∫= NiKi-1+∫-mj=-1 NjKj 其中,Ni和Nj 表示第i位和小数点(i) 后(1) 第 j 位上的数码;Ki-1和Kj 表示该数码的权, K 是 基数。上式中的前一项表示数的整数部分,后一项表示数的小数部分,它们分别有 n 位 和 m 位。 任何一种进制中的任何一个数都可以写成按权展开的形式。例如,按照以上展开式, 十进制数87654. 32 可以表示为: 87654.8×103+6×101+4×10-1+2×10-2 32=4+7×102+5×100+3×10 二进制数1011.1)3+0×21+1×2 1可以表示为: -1 (1011.2=1×22+1×20+1×2 八进制数357. (357.83×81+7×8 4可以表示为: -1 4)=2+5×80+4×8 十六进制数A8F 可以表示为 : 第 3 章信息编码与数据表示 52 0 (A8F)16=10×162+8×161+15×16 为了对不同进制的数进行区分,书写时,在数字后面加B(Binary)表示二进制数,加 O(Octal)表示八进制数,加H(Hexadecimal)表示十六进制数,十进制数则可用后缀D (Decimal)表示或者不加。也可在数字后面加下标来表示相应的进制数。例如,1011B 或 (2 表示1011 是二进制数。 1011) 3.3 不同数制之间的转换 1. 1. 将非十进制数转换成十进制数 将非十进制数转换成十进制数的方法是把非十进制数按位权重展开并求和。 【例3-1】将二进制数10110101 转换成十进制数。 解: (10110101) 2 =1×27+0×26+1×25+1×24+0×23+1×22+0×21+1×20 =128+32+16+4+1 =(181)10 即二进制数10110101 转换成十进制数为181 。 【例3-2】将八进制数123 转换成十进制数 。 解:(123)1×82+2×81+3×80=64+16+3=(83) 8=10 即八进制数123 转换成十进制数为83 。 【例3-3】将十六进制数15C 转换成十进制数 。 解:(15C)1×161+12×160==(10 16=2+5×16256+80+12348) 即十六进制数15C 转换成十进制数为348 。 2. 将十进制数转换成二进制数 整数部分和小数部分的转换方法是不同的,下面分别介绍。 (1)整数部分的转换。将一个十进制整数转换为二进制整数,采用的方法是“除2取 余”法,即对一个十进制整数反复进行除以2和保留余数的操作,直至商为0,然后将所得 到的余数自下而上排列即可。 【例3-4】将十进制数181 转换成二进制数 。 解 : 62 大学计算机基础 结果:(181)10110101) 10=(2 (2)小数部分的转换。将一个十进制小数转换为二进制小数,采用的方法是“乘2取 整”法,即将一个十进制小数不断地乘以2,直到小数的当前值为0或满足所要求的精度 为止。每乘一次取一次整数,最后将所得到的乘积的整数部分自上而下排列即可。 【例3-将十进制小数0. 5】125 转换成二进制小数 。 解 : 结果:(0.125)0. 10=(001)2 通常一个非十进制小数能够完全准确地转换成十进制小数,但一个十进制小数并不 一定能完全准确地转换成非十进制小数。例如,十进制小数0. 1就不能完全准确的转换 成二进制小数。在这种情况下,可以根据精度要求只转换到小数点后某一位为止,这个数 就是该小数的近似值。 【例3-将十进制小数0.精确到5位小数。 6】1转换成二进制小数 , 解 : 结果:(1)0.2 0.10≈(00111) 在进行转换时,如果一个数既有整数部分,又有小数部分,应分别进行转换,然后再组 合起来。 【例3-将十进制数181.精确到5位小数。 7】1转换成二进制数 , 解:(181)10=(10110101) 2 (1)0.2 0.10≈(00111) (181.10≈(00111) 1)10110101.2 第 3 章信息编码与数据表示 72 3. 二进制数与八进制数、十六进制数之间的转换 二进制数适合计算机内部数据的表示和运算,但书写起来位数比较长,如表示一个十 进制数1024,写成等值的二进制数就需要11 位,很不方便。而八进制数和十六进制数比 等值的二进制数的长度短得多,而且它们之间的转换也非常方便。因此,在书写程序和数 据时,在用到二进制数的地方,往往采用八进制数或十六进制数的形式。 由于二进制数、八进制数和十六进制数之间存在特殊的关系,即81=23,161=24,因 此转换方法相对简单。几种常用数制之间的对应关系如表3-2所示。 表3- 2 几种常用数制之间的对应关系 十进制数二进制数八进制数十六进制数 0 0000 0 0 1 0001 1 1 2 0010 2 2 3 0011 3 3 4 0100 4 4 5 0101 5 5 6 0110 6 6 7 0111 7 7 8 1000 10 8 9 1001 11 9 10 1010 12 A 11 1011 13 B 12 1100 14 C 13 1101 15 D 14 1110 16 E 15 1111 17 F (1)八进制数与二进制数之间的转换。因为81=23,所以每位八进制数都可以用3 位二进制数表示,也可以说3位二进制数可以表示1位八进制数。根据这种对应关系,将 二进制数转换成八进制数时,只需以小数点为界,分别向左、向右,每3位二进制数分为一 组,最后不足3位时用0补足3位(整数部分在高位补0,小数部分在低位补0); 然后将每 组转换成相应的八进制数,即可完成转换。 【例3-将二进制数10110101. 8】0100101 转换成八进制数 。 解:将每3位二进制数转换为1位的八进制数即可 。 (010110101.010010100) 2 (2 4) 6 5.2 2 8 大学计算机基础 结果:(10110101.2=(224) 0100101)265.8 【例3-将八进制数725. 9】16 转换成二进制数 。 解:将每位八进制数转换为3位的二进制数即可 。 (7 2 5. 1 6)8 (111 010 101.2 结果:(725.8=(00111) 001 110) 16)111010101.2 (2)十六进制数与二进制数之间的转换。因为161=4,所以每位十六进制数都可以 用4位二进制数表示,也可以说4位二进制数可以表示12 位十六进制数。根据这种对应 关系,将二进制数转换成十六进制数时,只需以小数点为界,分别向左、向右,每4位二进 制数分为一组,最后不足4位时用0补足4位(整数部分在高位补0,小数部分在低位补 0), 然后将每组转换成相应的十六进制数,即可完成转换。 【例3-将二进制数1110110101. 10 】0100101 转换成十六进制数 。 解:将每4位二进制数转换为1位的十六进制数即可 。 (0011 1011 0101.2 01001010) 5. 4 16 结果:(1110110101. (3 2= B(3B5.16 A) 0100101)4A) 【例3-将十六进制数7C5. 11 】E6 转换成二进制数。 解:将每位十六进制数转换为4位的二进制数即可 。 (7 C5. E6) 8 (0111 1100 0101.2 11100110) 结果:(7C5.16=(1110011) E6)11111000101.2 (3)将十进制数转换成八、十六进制数。若要将十进制数转换为八进制数或十六进 制数,一般借助于二进制数,即先将十进制数转换成二进制数,再将此二进制数转换为八 进制数或十六进制数。 【例3-12 】将十进制数123 转换成十六进制数 。 解:具体步骤如下 。 第一步:先将十进制数123 转换为二进制数 : 结果:(123)10=(1111011)2 第二步:再将二进制数1111011 转换为十六进制数,即: (1111011)0111 1011)7B) 2=(2=(16 第 3 章信息编码与数据表示 92 结果:(123)10=(1111011)2=(7B)16 将十进制数转换成八进制数的情况与将十进制数转换成十六进制数相似,不再赘述。 1. 二进制的常用单位 3.4 1.位 位(bit)是度量信息的单位,也是表示信息量的最小单位,只有0、1两种二进制状态。 2.字节 字节(Byte)是计算机中数据处理和存储容量的基本单位,1个Byte由8个bit组成, 能够容纳一个英文字符,一个汉字需要两个字节的存储空间。 计算机常用的存储单位及其关系如下: 1Byte(字节)=8bit(比特) 1KB(KiloByte千字节)=1024B(字节) 1MB(MegaByte兆字节)=1024KB 1GB(GigaByte吉字节)=1024MB 1TB(TeraByte太字节)=1024GB 1PB(PetaByte拍字节)=1024TB 1EB(ExaByte艾字节)=1024PB 1ZB(ZetaByte泽字节)=1024EB 1YB(YotaByte尧字节)=1024ZB 1BB(BrontoByte珀字节)=1024YB 1NB(NonaByte诺字节)=1024BB 1DB(DoggaByte刀字节)=1024NB 3.字 在计算机中占据一个单独的地址(内存单元的编号)并作为一个单元(由多个字节组 合而成)处理的一组二进制数称为“字”(Word),它由若干个位或字节所组成。在计算机 的运算器、控制器中,数据或指令通常都是以字为单位进行传送的。字出现在不同的位置 是有不同的含义的,对计算机的运算器和内存器来说,一个字或几个字是一个数据;对于 控制器来说,一个字或几个字是一条指令。 4.字长 一个字所包含的二进制位的数量称为字长,它反映了计算机处理信息的一种能力。 字长是CPU性能的重要标志之一,字长越长,说明计算机一次能处理的数据量就越大。 例如,8位的CPU字长为8位,一个字等于一字节,一次只能处理一字节,而32位的CPU 字长为32位,一个字等于4字节,一次能处理4字节。同理,字长为64位的CPU一次可 以处理8字节,一个字等于8字节。 03 大学计算机基础 3.数值数据在计算机中的表示 2 数据是计算机处理的对象。从不同的处理角度来看,数据有不同的表现形态。从外 部形式的角度来看,计算机可处理数值、文字、图、声音、视频及各种模拟信息,它们被称为 感觉媒体。从算法描述的角度来看,有图、表、树、队列、矩阵等结构类型的数据。从高级 语言程序员的角度来看,有数组、结构、指针、实数、整数、布尔型、字符和字符串等类型的 数据。不管以什么形态出现,在计算机内部,数据最终都是由机器指令来处理。而从机器 指令的角度来看,数据只有整数、浮点数和位串这几类简单的基本数据类型。其中,整数 和浮点数统称数值数据。 数值数据可用来表示数量的多少,可比较其大小,分为整数和实数,整数又分为无符 号整数和带符号整数。在计算机内部,整数用定点数表示,实数用浮点数表示。非数值数 据就是一个没有大小之分的位串,不表示数量的多少,主要用来表示字符数据和逻辑 数据。 由于计算机采用二进制,所以一切信息都要由0和1两个数字的组合,即二进制数字 化编码来表示。 2.机器数和真值 3.1 日常生活中,常使用带正负号的十进制数表示数值数据。在计算机中,对带符号的数 的正号和负号,必须用“0”和“1”进行编码。通常把一个数的最高位定义为符号位,用0表 示正,用1表示负,称为数符,其余位表示数值。把在计算机内存放的正、负号数码化的 数,称为机器数,而把机器外部由正、负号表示的数,称为真值。 真值一般用十进制表示。例如,真值为+7,8位二进制数为00000111;真值为-7, 8位二进制数为10000111 。 对于无符号数,由于不涉及符号问题,所以在计算机中用一个数的全部有效位来表示 数的大小。例如,真值为无符号整数123,8位二进制数为01111011 。 3.2 反码和补码 2.原码、 带符号数的数值和符号都用二进制数码来表示,那么计算机对数据进行运算时,符号 位应如何处理? 是否也同数值位一起参加运算? 为了妥善地处理这个问题,就产生了把 符号位和数值位一起进行编码的各种方法,这就是原码、反码和补码。 1. 原码 正数的符号位用“0”表示,负数的符号位用“1”表示,数值部分用真值的绝对值来表示 的二进制数,称为原码。用[X]原表示,设 X 为整数。例如: 第 3 章信息编码与数据表示 13 X1=+66=+1000010 [X1]原=01000010 X2=-66=-1000010 [X2]原=11000010 原码的特点如下 : ①用原码表示数简单、直观,与真值之间转换方便。 ②0 的原码表示不唯一:[+0]原=00000000,[-0]原=10000000 。 +127 ③ 。 因为原码的最高位表示符号位,所以8位二进制原码表示的整数范围是:-127~ ④加、减法运算复杂。不能用原码直接对两个同号数相减或两个异号数相加,必须 先判断数的正负,再决定使用加法还是减法,才能进行具体的计算,因而使机器的结构相 应地复杂化或增加机器的运算时间。例如,将十进制数“+23”的原码与十进制数“-36” 的原码直接相加:[+23]原+[-36]原=00010111+10100100=10111011 。其结果是, 符号位为“1示负数,数值部分为“0111011是十进制数“59所以计算结果为“-59 这显然是错误的。现代计算机中不用原码来表示整数,只用定点原码小数来表示浮点数 的尾数部分。表(”) ,(”) ,(”) ,(”) 因此,为运算方便,在计算机中通常将减法运算转换为加法运算,由此引入了反码和 补码。 2. 反码 反码是为了解决负数加法运算问题,将减法运算转换为加法运算,从而简化运算规 则。反码表示法规定:正数的反码与其原码相同;负数的反码符号位为“1,(”) 数值位为其 原码数值位按位取反,即“1”都换成“0,(”) “0”都换成 [ “1”。例如: X1=+66=+1000010 X1]反=01000010 X2=-66=-1000010 [X2]反=10111101 反码的特点如下: ①0 的反码表示不唯一:[+0]反=00000000,[-0]反=11111111 。 ②8 位二进制反码的取值范围是:-127~+127 。 反码在计算机中很少被使用,有时用作数码变换的中间表示形式或用于数据效验。 3. 补码 在人们的计算概念中,“0是(”) 没有正负之分的,于是就引入了补码概念。 数的补码与“模”有关。“模”是指一个计数系统的计数量程或一个计量器的容量。任 何有“模”的计量器,均可化减法运算为加法运算。例如,时钟的模为12,若当前时钟指向 10 点,而准确时间为6点,这时可以使用两种方法来调整时钟时间:一是逆时针拨时针4 小时,即10-4=6;二是顺时针拨时针8小时,即10+8=12+6≡6(mod12), 仍为6点。 可见,在以12 为模的系统中,加8和减4的效果是一样的。因此,可以说-4的补码为8, 或者说-4和+8 对模12 来说互为补码。 计算机中的存储、运算和传送部件都只有有限位,因此计算机表示的机器数的位数也 只有有限位。两个 n 位二进制数在进行运算过程中,可能会产生一个多于 n 位的结果, 此时,计算机会舍弃高位而保留低 n 位,这样做可能会产生两种结果。 大学计算机基础 ①剩下的低 n 位数不能正确表示运算结果,即丢掉的高位是运算结果的一部分。例 如,在两个同号数相加时,当相加得到的和超出了 n 位数可表示的范围时出现这种情况, 称此时发生了溢出现象。 ②剩下的低 n 位数能正确表示运算结果,即高位的舍去并不影响其运算结果。在两 个同号数相减或两个异号数相加时,运算结果就是这种情况。舍去高位的操作相当于“将 一个多于 n 位的数去除以2n ,保留其余数作为结果”的操作,也就是“模运算”操作。 补码表示法规定:对于正数,其补码与原码相同;对于负数,其补码为其反码加1,即 [X]补=[X]反+1 。例如: [X1=+66=+1000010 X1]补=01000010 X2=-66=-1000010 [X2]补=10111110 补码的特点如下 : ①0 的补码表示唯一:[+0]补=00000000,[-0]补=00000000 。 ②8 位二进制补码的取值范围是:-128~+127 。 ③加、减法运算方便。当负数用补码表示时,可以把减法运算转化为加法运算。 ④由补码求真值:补码最高位为“1”表示真值为负数,真值的绝对值为补码数值位 “按位求反加1的和”。 3.3 数的定点表示与浮点表示 2. 日常生活中所使用的数有整数和实数之分,整数的小数点固定在数的最右边,可以省 略不写,而实数的小数点则不固定。计算机中只能表示0和1,无法表示小数点,因此,要 使计算机能够处理日常使用的数值数据,必须解决小数点的表示问题。通常计算机中通 过约定小数点的位置来实现。小数点位置约定在固定位置的数,称为定点数;小数点位置 约定为可浮动的数,称为浮点数。 1. 定点表示法 定点表示法用来对定点小数和定点整数进行表示。对于定点小数,其小数点总是固 定在数的左边,一般用来表示浮点数的尾数部分。对于定点整数,其小数点总是固定在数 的最右边,因此可用“定点整数”来表示整数。 2. 浮点表示法 对于任意一个实数X,可以表示成如下形式 : X=(-1) S ×M ×RE 其中, S 取值为0或1,用来决定数 X 的符号; M 是一个二进制定点小数,称为数 X 的尾数; E 是一个二进制定点整数,称为数 X 的阶或指数; R 是基数,可以取值为2、4、16 等。在基数 R 一定的情况下,尾数 M 的位数反映数 X 的有效位数,它决定了数的表示精 度,有效位数越多,表示精度就越高;阶 E 的位数决定数 X 的表示范围;阶 E 的值确定了 小数点的位置。 假定浮点数的尾数是纯小数,那么,从浮点数的形式来看,绝对值最小的非零数形如 第 3 章信息编码与数据表示 33 大学计算机基础 0.0…01×R-11…1,绝对值最大的数形如0.11…1×R11…1。所以,假设m 和n 分别表示阶 和尾数的位数,基数是2,则浮点数X 的绝对值的范围是: 2- 2m ( -1) ×2-n ≤|X|≤(1-2-n)×2(2m -1) 上述公式中,紧靠|X|左右两边的两个因子就是非零定点小数的绝对值表示范围,浮 点数的最小数是定点小数的最小数2-n 除以一个很大的数2(2m -1) ,而浮点数的最大数则 是定点小数最大数(1-2-n )乘以这个大数2(2m -1) ,由此可见,浮点数的表示范围比定点 数的表示范围要大得多。 3.3 二进制数的运算 二进制数是有自己的运算规则,以下简单介绍其中的算术运算和逻辑运算的规则。 3.3.1 二进制数的算术运算 1.二进制数的加法 二进制数的加法运算法则是: 0+0=0 0+1=1 1+0=1 1+1=0(向高位进位) 【例3-13】 求(1101)2+(0111)2=? 解: 被加数: 1101 加数:+ 0111 结果: 10100 结果:(1101)2+(0111)2=(10100)2 2.二进制数的减法 二进制数的减法运算法则是: 0-0=0 1-0=1 1-1=0 0-1=1(向高位借位) 【例3-14】 求(1101)2-(0111)2=? 解: 被减数: 1101 减数:- 0111 结果: 0110 结果:(1101)2-(0111)2=(0110)2 3.二进制数的乘法 二进制数的乘法运算法则是: 0×0=0 0×1=1×0=0 1×1=1 34 【例3-15 】 解: 求(1101)2×(101)2=? 被乘数: 1101 乘数:× 101 1101 0000 1101 结果:(2=( 结果: 2 1000001 1101)2×(101)1000001) 4. 二进制数的除法 二进制数的除法运算法则是: 0÷1=0 1÷1=1 【例3-16 】求(1001110)110) 2÷(2=? 解: 结果:(1001110)110)1101) 2÷(2=(2 3.2 二进制数的逻辑运算 3. 逻辑数据只有两个值:“ 真”与“假”、“是”与“否”、“条件成立”与“条件不成立”,在计 算机中用二进制的“1”与“0”表示。 逻辑运算与算术运算不同,算术运算是将一个二进制数的所有位综合为一个数值整 体,低位的运算结果会影响到高位(如进位等), 而逻辑运算是按位进行运算,故逻辑运算 没有进位或借位。逻辑运算的结果并不表示数值大小,而是表示一种逻辑概念,若成立用 真或1表示,若不成立用假或0表示。常用的逻辑运算有“与”运算、“或”运算、“非”运算 和“异或”运算。 1.“与”运算 做一件事情取决于多种因素,只有当所有条件都成立时才去做,否则就不做,这种因 果关系称为逻辑“与”。“与”运算通常用符号“∧”“∩”“AND”表示。 “与”运算规则 : 0∧0=0 0∧1=0 1∧0=0 1∧1= 1 第 3 章信息编码与数据表示 53 即两个参与运算的数,若有一个数为0,则运算结果为0;若都为1,则运算结果为1。 【例3-17 】求01101011∧11001110=? 01101011 ∧ 11001110 01001010 结果:01101011∧11001110=01001010 2.“或”运算 做一件事情取决于多种因素,只要其中有一个因素满足就去做,这种因果关系称为逻 辑“或”。“或”运算通常用符号“∨”“∪”OR 来表示。 “或”运算规则: 0∨0=0 0∨1=1 1∨0=1 1∨1=1 即两个参与运算的数,若有一个数为1,则运算结果为1;若都为0,则运算结果为0。 【例3-18 】求01101011∨11001110=? 01101011 ∨ 11001110 11101111 结果:01101011∨11001110=11101111 3.“非”运算 逻辑“非”实现逻辑否定,即求“反”运算,“真”变“假”、“假”变“真”。表示逻辑“非”常 在逻辑变量上面加一横线,如“非” A 写A。 .. “非”运算规则 : 1=0 0= 1 【例3-19 】已知A=01101011,求 .. A 。 解:..10010100 A= 4.“异或”运算 当参与运算的两个数的值相同时,逻辑“异或”的结果是“假”;当参与运算的两个数的 值不同时,逻辑“异或”的结果是“真”。“异或”运算通常用符号“⊕”表示。 “异或”运算规则: 0⊕0=0 1⊕1=0 0⊕1=1 1⊕0= 1 【例3-20 】求01101011⊕11001110= ? 01101011 ⊕ 11001110 10100101 结果:01101011⊕11001110=10100101 大学计算机基础 3.常用的信息编码 4 所谓信息编码,就是采用少量的基本符号(数码)和一定的组合规则来区别和表示信 息。计算机是以二进制方式组织、存放信息的,所以现实世界中的各种数据信息如果要在 计算机中进行运算和处理,都必须用二进制数码0和1的不同组合,即二进制编码表示。 下面介绍几种常用的信息编码方式。 3.1 BCD 码 4. BCD码是以二进制编码表示的十进制数,其编码方式是用4位二进制数表示1位十 进制数。而4位二进制数可以组合成16种状态,去掉10种状态后还有6种冗余状态,所 以从16种状态中选取10种状态表示十进制数的方法很多,因而存在多种BCD码方案。 1.有权BCD 码 有权BCD码是指表示每个十进制数位的4个二进制数位(称为基2码)都有一个确 定的权。最常用的一种编码就是8421码,它选取4位二进制数按计数顺序的前10个代 码与十进制数字相对应,每位的权从左到右分别为8、4、2、1,因此称为8421码,也称自然 BCD码,记为NBCD码。 2.无权BCD 码 无权BCD码是指表示每个十进制数位的4个基2码没有确定的权。在无权码方案 中,用得较多的是余3码和格雷(gray)码。 一个十进制数通常用多个对应的BCD码组合表示,每个数字对应4位二进制数,两 个数字占一个字节,数符可用1位二进制数表示(1表示负数,0表示正数),或用4位二进 制数表示,并放在数字串最后,通常用1100表示正号,用1101表示负号。例如,奔腾处 理器中的十进制数占80位,第一个字节中的最高位为符号位,后面的9个字节可表示18 位十进制数。 3.2 ASCI 码 4. 美国信息交换标准代码,简称ASCI 码,使用指定的7位或8位二进制数组合来表 示128或256种可能的字符。标准ASCI 码也叫基础ASCI 码,使用7位二进制数(剩 下的1位二进制数为0)来表示所有的大写和小写字母、数字0~9、标点符号,以及在美式 英语中使用的特殊控制字符。 在标准ASCI 码中,其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传 送过程中用来检验是否出现错误的一种方法,一般分为奇校验和偶校验两种。奇校验规 定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验 第 3 章信息编码与数据表示 73 规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。通过 对奇偶校验位设置“1”或“0状(”) 态,保持8位字节中的“1”的个数总是奇数(称为奇校验)或 偶数(称为偶校验),用以检测字符在传送(写入或读出)过程中是否出错。 后128个称为扩展ASCI 码。许多基于x86的系统都支持使用扩展ASCI 码。扩 展ASCI 码允许将每个字符的第8位用于确定附加的128个特殊符号字符、外来语字母 和图形符号。 3.3 汉字编码 4. 汉字编码是为汉字设计的一种便于输入计算机的代码。汉字种类繁多,编码比英文 字符复杂,从汉字的输入、处理到输出,不同的阶段要采用不同的编码,包括汉字输入码、 汉字内码、汉字字形码。汉字输入码比较容易学习和记忆,汉字内码是计算机内部对汉字 的表示,要在显示器上显示或在打印机上打印出用户所输入的汉字,需要汉字字形码。用 户用汉字输入码输入汉字,系统由汉字输入码找到相应的汉字内码,系统由汉字内码再找 到相应的字形码。 1.汉字输入码 汉字输入码所解决的问题是如何使用英文标准键盘把汉字输入到计算机内。其编码 方案主要分从音编码和从形编码两大类。其他类型是相互结合型,或与字义结合,或与检 字法结合,或与词组结合。因设计的目的、思想不同,用于编码的元素、所用码元的数量、 取码方法和规则,避开同码字和占用键盘键位的方法等,都因设计者而异,因此产生了数 百种汉字输入编码方案。 从音编码是以《汉语拼音方案》为基本编码元素,在汉语拼音键盘或经过处理的西文 键盘上,根据汉字读音直接键入拼音。只要是掌握汉语拼音的人不需训练和记忆即可使 用,但汉字同音字太多,输入重码率较高,因此按拼音输入后还必须进行同音字选择,这就 会影响输入速度。 从形编码是以笔画和字根为编码元素,所有的汉字都由横、竖、撇、点、折、弯有限的几 种笔画构成,并且又可分为“左右”“上下”“包围”“单体”有限的几种构架,每种笔画都赋予 一个编码并规定选取字形构架的顺序,不同的汉字因组成的笔画和字形构架不同,就能获 得一组不同的编码来表达一个特定的汉字,广泛使用的“五笔字形”就属于这一种。 除此之外,还有数字编码,利用一串数字表示一个汉字,电报码就属于这种。数字编 码输入的优点是无重码,输入码与内部编码的转换比较方便;缺点是代码难记忆。 2.汉字内码 同一个汉字以不同输入方式进入计算机时,编码长度以及0、1组合顺序差别很大,使 得汉字信息进一步存取、使用、交流十分不方便,必须转换成长度一致且与汉字唯一对应 的,能在各种计算机系统内通用的编码,满足这种规则的编码称为汉字内码。 汉字内码是用于汉字信息的存储、交换检索等操作的机内代码,一般采用两个字节表 示。英文字符的机内代码是7位的ASCI 码,当用一个字节表示时,最高位为“0”。为了 大学计算机基础 与英文字符区别,一个汉字的国标码占两个字节,因为西文字符和汉字都是字符,为了在 计算机内部能够区分是汉字编码还是ASCI 码,将汉字国标码两个字节的最高位均规定 为“1”,变换后的国标码称为汉字机内码。由此可知,汉字机内码的每个字节都大于128, 而每个西文字符的ASCI 码值均小于128 。有些系统中字节的最高位用于奇偶校验位或 采用扩展ASCI 码,这种情况下用3个字节表示汉字内码。 3.汉字字形码 计算机内存储的汉字需要在屏幕上显示或在打印机上输出时,需要知道汉字的字形 信息,汉字内码并不能直接反映汉字的字形,而要采用专门的字形码。 目前的汉字处理系统中,汉字字形码通常有两种表示方式:点阵和矢量表示方法。 用点阵表示字形时,是将字符的字形分解成若干“点”组成的点阵,将此点阵置于网状 上,每一个小方格是点阵中的一个“点”,点阵中的每一个点可以有黑白两种颜色,有字形 笔画的点用黑色,反之用白色,这样就能描写出汉字字形。如果用二进制的“1表(”) 示黑色 点,用“0表(”) 示白色点,每一行16个点用两字节表示,则需32个字节描述一个汉字的 字形。 一个计算机汉字处理系统常配有宋体、黑体、楷体等多种字体,同一个汉字不同字体 的字形编码也是不相同的。 根据输出汉字的要求不同,点阵的多少也不同。简易型汉字为16*16点阵,提高型 汉字为24*24点阵、32*32点阵、48*48点阵等。点阵规模越大,字型越清晰美观,所占 存储空间也越大。 矢量表示方式存储的是描述汉字字形的轮廓特征,当要输出汉字时,通过计算机的计 算,由汉字字形描述生成所需大小和形状的汉字点阵。矢量化字形描述与最终文字显示 的大小,分辨率无关,因此可以产生高质量的汉字输出。Windows中使用的TrueType技 术就是汉字的矢量表示方式。 3.4 Uioe码 4.ncd Unicode码是由多语言软件制造商组成的统一码联盟制定的一种国际通用字符编码 标准,是为了解决传统的字符编码方案的局限而产生的。它为每种语言中的每个字符设 定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。 Unicode编码共有三种具体实现,分别为UTF-8、UTF-16 、UTF-32,其中UTF-8占 用1~4字节、UTF-16占用2~4字节、UTF-32占用4字节。Unicode是字符集,UTF是 一种编码方式,字符集和编码是不同的概念,但有时称呼上有些模糊,经常笼统的称这些 Unicode字符集为Unicode编码。Unicode字符集只规定了有哪些字符,而最终决定采用 哪些字符,每一个字符用多少个字节表示等问题,则由编码来决定。 Unicode码在全球范围的信息交换领域均有广泛的应用。 第 3 章信息编码与数据表示 93 本章小结 1.计算机中采用二进制数存储数据,为了书写和阅读方便,引入八进制数和十六进 制数;在日常生活中,更习惯使用十进制数。 2.每种数值都有自己的数码、基数和权重。 3.将非十进制数转换成十进制数是按位权重展开并求和。 4.将十进制数的整数部分转为二进制数采用的是“除2取余”法,将十进制数的小数 部分转为二进制数采用的是“乘2取整”法。 5.计算机中表示信息量的最小单位是位(bit),最基本的单位是字节(Byte)。 6.数值数据在计算机中有原码、补码和反码三种表示方式。 7.小数点位置约定在固定位置的数,称为定点数;小数点位置约定为可浮动的数,称 为浮点数。 8.二进制数的算术运算有“加”“减”“乘”“除”四种,逻辑运算有“与”“或”“非”“异或” 四种。 9.常用的信息编码方式有:BCD码、ASCI 码、汉字编码、Unicode码等。 10.汉字编码比较复杂,从汉字的输入、处理到输出,不同的阶段要采用不同的编码, 包括汉字输入码、汉字内码、汉字字形码。 习题 .将下列十进制数转换为二进制数 。 100 21.-1 35 64 75 3.1.255 .将下列二进制数转换为十进制数 。 11011 101 10.0.-111 -011 11 111. 将下列二进制数转换为八进制数和十六进制数。(101(.) 10011)(1101001.2 2 11) 将下列八进制数转换为二进制数。(1257)(.) (425.8 8 354) .将下列十六进制数转换为二进制数 。 (AB3F)(2AB.4CD) .分别求下列真值的原码、反(1616) 码和补码(码的长度为8位二进制数) 。 +1111 -1111 -0 +0 +1010 -1010 十进制小数到二进制形式的转换是不精确的,用这一点能否否定在计算机中引入二进制的(.) 合适性? 为什么? 计算机中处理、存储、传输信息的最小单位和最基本的单位分别是什么? 9.常(.) 用的信息编码方式有哪些? 大学计算机基础