第1章 数制与编码 1.1 数制 1.2 编码
1.1 数 制 1.1.1 进位计数制 按进位的原则进行计数,称为进位计数制。每一种进位计数制都有一组特定的数码,例如十进制数有 10 个数码, 二进制数只有两个数码,而十六进制数有 16 个数码。 每种进位计数制中允许使用的数码总数称为基数或底数。 在任何一种进位计数制中,任何一个数都由整数和小数两部分组成, 并且具有两种书写形式:位置记数法和多项式表示法。
1. 十进制数(Decimal) ① 采用 10 个不同的数码0、 1、 2、 …、 9和一个小数点(.)。 ② 进位规则是“逢十进一”。 若干个数码并列在一起可以表示一个十进制数。例如在435.86这个数中,小数点左边第一位的5代表个位,它的数值为5; 小数点左边第二位的 3 代表十位,它的数值为3×101;左边第三位的 4 代表百位,它的数值为4×102;小数点右边第一位的值为8×10-1;小数点右边第二位的值为6×10-2。可见,数码处于不同的位置,代表的数值是不同的。这里102、101、100、 10-1、10-2 称为权或位权,即十进制数中各位的权是基数 10 的幂,各位数码的值等于该数码与权的乘积。因此有
上式左边称为位置记数法或并列表示法,右边称为多项式表示法或按权展开法。 一般,对于任何一个十进制数N, 都可以用位置记数法和多项式表示法写为
上述十进制数的表示方法也可以推广到任意进制数。对于一个基数为R(R≥2)的R进制计数制,数N可以写为 式中,n代表整数位数,m代表小数位数,ai(-m≤i≤n-1)表示第i位数码,它可以是0、1、2、3、…、9 中的任意一个,10i为第i位数码的权值。 上述十进制数的表示方法也可以推广到任意进制数。对于一个基数为R(R≥2)的R进制计数制,数N可以写为 (1-2) 式中,n代表整数位数,m代表小数位数,ai为第i位数码,它可以是0、1、 …、(R-1)个不同数码中的任何一个,Ri为第i位数码的权值。
2. 二进制数 二进制数的进位规则是“逢二进一”,其进位基数R=2, 每位数码的取值只能是0或1,每位的权是2的幂。表1-1列出了二进制位数、权和十进制数的对应关系。 表1-1 2的幂与十进制值
任何一个二进制数,根据式(1-2)可表示为 例如:
可见,一个数若用二进制数表示要比相应的十进制数的位数长得多,但采用二进制数却有以下优点: ① 因为它只有0、1 两个数码,在数字电路中利用一个具有两个稳定状态且能相互转换的开关器件就可以表示一位二进制数,因此采用二进制数的电路容易实现, 且工作稳定可靠。 ② 算术运算规则简单。二进制数的算术运算和十进制数的算术运算规则基本相同,惟一区别在于二进制数是“逢二进一”及“借一当二”,而不是“逢十进一”及“借一当十”。
例如:
3. 八进制数(Octal) 八进制数的进位规则是“逢八进一”,其基数R=8,采用的数码是0、 1、 2、 3、 4、 5、 6、 7, 每位的权是 8 的幂。 任何一个八进制数也可以根据式(1-2)表示为 例如:
4. 十六进制数(Hexadecimal) 十六进制数的特点是: ① 采用的 16 个数码为0、 1、 2、 …、 9、 A、 B、 C、 D、 E、 F。 符号A~F分别代表十进制数的10~15。 ② 进位规则是“逢十六进一”,基数R=16,每位的权是16的幂。 任何一个十六进制数, 也可以根据式(1-2)表示为 例如:
1.1.2 进位计数制之间的转换 1. 二进制数与十进制数之间的转换 1) 二进制数转换成十进制数——按权展开法 二进制数转换成十进制数时,只要将二进制数按式(1-3)展开,然后将各项数值按十进制数相加,便可得到等值的十进制数。 例如: 同理,若将任意进制数转换为十进制数,只需将数(N)R写成按权展开的多项式表示式,并按十进制规则进行运算, 便可求得相应的十进制数(N)10。
2) 十进制数转换成二进制数 ① 整数转换——除2取余法。若将十进制整数(N)10转换为二进制整数(N)2,则可以写成 如果将上式两边同除以2,所得的商为 余数就是a0。
同理,这个商又可以写成 显然,若将上式两边再同时除以2,则所得余数是a1。重复上述过程,直到商为0,就可得二进制数的数码a0、a1、…、an-1。
例如,将(57)10转换为二进制数:
② 小数转换——乘2取整法。若将十进制小数(N)10转换为二进制小数(N)2,则可以写成 将上式两边同时乘以2, 便得到 令小数部分 则上式可写成 因此,2(N)10乘积的整数部分就是a-1。若将2(N)10乘积的小数部分F1再乘以2,则有
所得乘积的整数部分就是a-2。显然,重复上述过程,便可求出二进制小数的各位数码。 例如,将(0.724)10转换成二进制小数。
可见,小数部分乘2取整的过程,不一定能使最后乘积为0,因此转换值存在误差。通常在二进制小数的精度已达到预定的要求时,运算便可结束。 将一个带有整数和小数的十进制数转换成二进制数时,必须将整数部分和小数部分分别按除2取余法和乘2取整法进行转换,然后再将两者的转换结果合并起来即可。 同理,若将十进制数转换成任意R进制数(N)R,则整数部分转换采用除R取余法;小数部分转换采用乘R取整法。
2. 二进制数与八进制数、十六进制数之间的相互转换 八进制数和十六进制数的基数分别为8=23,16=24, 所以三位二进制数恰好相当一位八进制数,四位二进制数相当一位十六进制数, 它们之间的相互转换是很方便的。 二进制数转换成八进制数的方法是从小数点开始, 分别向左、向右,将二进制数按每三位一组分组(不足三位的补0),然后写出每一组等值的八进制数。 例如,求(01101111010.1011)2的等值八进制数:
例如,求(01101111010.1011)2的等值八进制数: 二进制 001 101 111 010 . 101 100 八进制 1 5 7 2 . 5 4 所以 (01101111010.1011)2=(1572.54) 8 二进制数转换成十六进制数的方法和二进制数与八进制数的转换相似,从小数点开始分别向左、向右将二进制数按每四位一组分组(不足四位补0),然后写出每一组等值的十六进制数。
例如,分别求出(375.46)8、(678.A5)16的等值二进制数: 例如,将(1101101011.101)转换为十六进制数: 00 11 01 10 10 11 . 10 10 3 6 B . A 所以 (1101101011.101)2=(36B.A)16 八进制数、十六进制数转换为二进制数的方法可以采用与前面相反的步骤,即只要按原来顺序将每一位八进制数(或十六进制数)用相应的三位(或四位)二进制数代替即可。 例如,分别求出(375.46)8、(678.A5)16的等值二进制数: 八进制 3 7 5 . 4 6 十六进制 6 7 8 . A 5 二进制 011 111 101 . 100 110 二进制 0110 0111 1000.1010 0101 所以 (375.46)8=(011111101.100110)2, (678.A5)16=(011001111000.10100101)2
1.2 编 码 1.2.1 二—十进制编码(BCD码) 二—十进制编码是用四位二进制码的10 种组合表示十进制数0~9,简称BCD码(Binary Coded Decimal)。 这种编码至少需要用四位二进制码元,而四位二进制码元可以有 16 种组合。当用这些组合表示十进制数0~9时, 有六种组合不用。由 16 种组合中选用 10 种组合,有
表 1-2 几种常用的BCD码 十进制数 8421码 5421码 2421码 余 3 码 BCD Gray码 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 9 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
1. 8421 BCD码 8421 BCD码是最基本和最常用的BCD码, 它和四位自然二进制码相似, 各位的权值为8、 4、 2、 1, 故称为有权BCD码。和四位自然二进制码不同的是, 它只选用了四位二进制码中前 10 组代码,即用0000~1001分别代表它所对应的十进制数, 余下的六组代码不用。
2. 5421 BCD码和2421 BCD码 5421 BCD码和2421 BCD码为有权BCD码,它们从高位到低位的权值分别为5、 4、 2、 1和2、4、2、1。 这两种有权BCD码中,有的十进制数码存在两种加权方法,例如, 5421 BCD码中的数码5,既可以用1000表示,也可以用0101表示,2421 BCD码中的数码6,既可以用1100表示, 也可以用0110表示。这说明5421 BCD码和2421 BCD码的编码方案都不是惟一的,表1-2只列出了一种编码方案。 表1-2中2421 BCD码的 10 个数码中,0和9、1和8、2和7、3和6、 4和5的代码的对应位恰好一个是0时,另一个就是1。我们称0和9、1和8互为反码。因此2421 BCD码具有对9互补的特点,它是一种对9的自补代码(即只要对某一组代码各位取反就可以得到9的补码),在运算电路中使用比较方便。
3. 余3 码 余 3 码是8421 BCD码的每个码组加3 (0011)形成的。 余 3 码也具有对 9 互补的特点,即它也是一种 9 的自补码,所以也常用于BCD码的运算电路中。 用BCD码可以方便地表示多位十进制数,例如十进制数(579.8)10可以分别用8421 BCD码、余 3 码表示为
1.2.2 可靠性编码 1. Gray码(格雷码) Gray码也称循环码,其最基本的特性是任何相邻的两组代码中,仅有一位数码不同,因而又叫单位距离码。 Gray码的编码方案有多种,典型的Gray码如表1-3所示。从表中看出,这种代码除了具有单位距离码的特点外,还有一个特点就是具有反射特性,即按表中所示的对称轴为界,除最高位互补反射外,其余低位数沿对称轴镜像对称。利用这一反射特性可以方便地构成位数不同的Gray码。
Gray码的单位距离特性有很重要的意义。假如两个相邻的十进制数 13 和 14, 相应的二进制码为1101和1110。在用二进制数作加 1 计数时,如果从 13 变 14, 二进制码的最低两位都要改变, 但实际上两位改变不可能完全同时发生, 若最低位先置0, 然后次低位再置1,则中间会出现1101—1100—1110, 即出现暂短的误码1100,而Gray码因只有一位变化,因而杜绝了出现这种错误的可能。 BCD Gray码是一种具有单位距离特性的BCD码,其编码方案也很多,表1-2最右边仅列出了一种,它有前九组代码与典型的四位Gray码相同,仅最后一组代码不同,用1000代替了Gray码的1101,这是因为从最大数 9 返回到 0,也应具有单位距离特性。
表 1-3 典型的Gray码
2. 奇偶校验码 代码(或数据)在传输和处理过程中,有时会出现代码中的某一位由 0 错变成 1,或 1 变成 0。奇偶校验码是一种具有检验出这种错误的代码,奇偶校验码由信息位和一位奇偶检验位两部分组成。 信息位是位数不限的任一种二进制代码。 检验位仅有一位,它可以放在信息位的前面,也可以放在信息位的后面。它的编码方式有两种: 使得一组代码中信息位和检验位中“1”的个数之和为奇数,称为奇检验; 使得一组代码中信息位和检验位中“1”的个数之和为偶数, 称为偶检验。
表 1-4 带奇偶检验的8421 BCD码
1.2.3 字符代码 表 1-5 ASCII码
ASCII码采用七位二进制数编码,因此可以表示128个字符。从表中可见,数字0~9,相应用0110000~0111001来表示,B8通常用作奇偶检验位,但在机器中表示时,常使其为 0,因此0~9的ASCII码为 30H~39H,大写字母A~Z的ASCII码为41H~5AH等。