您的位置: 网站首页 > 电子与嵌入式 > 数字电子技术与逻辑设计教程 > 第1章 数制与编码 > 【1.2 编 码】

1.2 编 码

 

1.2     

1.2.1  原码、反码与补码

在平常的算术运算中,用“+”表示正数,用“-”表示负数;而在数字系统中,正﹑负数的表示方法是:把一串二进制数的最高位作为符号位,在这个符号位上用0表示正数,用1表示负数。一串带符号位的二进制数通常称为机器数,它原来的数值形式称为该机器数的真值。原码﹑反码与补码是在计算机技术中广泛用到的机器数,下面分别来学习这3种码以及它们之间的转换关系。

1.原码

原码表示法又称为符号数值表示法,即码的最高位表示数的符号,后面的各位表示数的大小。例如,一个数的原始形式为:X=-1001001,即X的真值为-1001001。因为数的真值不能直接应用于计算机中,所以要将真值前面的符号数码化,将真值转换为可以应用于计算机的机器数,原码就是一种机器数。X的原码表示为:11001001。下面再举几个例子:

[+1010011]=01010011

[-1001100]=11001100

[-1111000]=11111000

由上述例子可见:

当真值X0时,例如,X=+101001[X]=01010010=X

当真值X0时,例如,X=-100110[X]=11001100

=10000000+1001100

=10000000-(-1001100

=2n-X

其中,n是原码的位数(不包括整数位)。

综上所述,一个n位的真值X(不包括整数位)的原码的公式表示方法为:

[X]=X     0X2n-1

[X]=2n-1-X     -2n-1X0      

可见,原码的最高位为符号位,符号为0表示真值为正,符号为1表示真值为负。所以将真值转换为原码时,若真值为正,则直接在其最高位加0;若真值为负,则直接在其最高位加1

值得注意的是,0的原码有两种表示方法:

[+0]=00000000

[-0]=10000000

2.反码

对于正数,反码的表示方法和原码相同,即最高位为符号位,用0表示,其后各位表示数值的大小。对于负数,由原码变为反码的规则为:除符号位的1不变外,其余各位按位取反,即原来为0的变为1,原来为1的变为0。下面举几个例子:

X=+1001001

[X]=01001001   [X]=01001001

X=1001001

[X]=11001001   [X]=10110110

通过上面的例子,可以总结出求反码的公式:  

[X]=X           0X2n-1

[X]=2n+1-1+X     -2n-1X0 

在反码的表示法中,0的表示法也有两种:

[+0]=00000000

[-0]=11111111

3.补码

对于正数,补码的表示方法和原码相同,即最高位为符号位,用0表示,其后各位表示数值的大小。对于负数,由原码变为补码的规则为:除符号位的1不变外,其余各位按位取反,并在最低位加1。下面举几个例子:

X=+1010001

[X]=01010001   [X]=01010001

X=-1010001

[X]=11001001   [X]=10110111

通过上面的例子,可以总结出求补码的公式表示法如下:  

[X]=X           0X2n-1

[X]=2n+1+X       -2n-1X0 

在补码的表示法中,0的表示法是唯一的。

综上所述可以看出,对于一个正数,有

[X]=[X]=[X]

对于一个负数,有

[X]=[X]+1

原码是人们习惯用到且容易识别的一种机器数,做乘除运算比较简单;补码可将数字系统中的减法运算用加法实现,做加减运算比较简单;反码是从原码到补码的过渡形式。值得注意的是,在用补码求和的结果中,要将运算结果产生的进位丢掉,才能得到正确的结果。下面举例说明。

例如,用补码实现X-Y的运算,其中X=1101Y=0101

[X]=01101   [-Y]=11011

[X]+[-Y]=01101+11011

=101000

可见,丢掉最高位的进位1,才得到正确的结果。

1-1  带符号数的真值﹑原码﹑反码和补码

   

   

   

   

+0000

00000

00000

00000

+0001

00001

00001

00001

+0010

00010

00010

00010

+0011

00011

00011

00011

+0100

00100

00100

00100

+0101

00101

00101

00101

+0110

00110

00110

00110

+0111

00111

00111

00111

+1000

01000

01000

01000

+1001

01001

01001

01001

+1010

01010

01010

01010

-0000

10000

11111

 

-0001

10001

11110

11111

-0010

10010

11101

11110

-0011

10011

11100

11101

-0100

10100

11011

11100

-0101

10101

11010

11011

-0110

10110

11001

11010

-0111

10111

11000

11001

-1000

11000

10111

11000

-1001

11001

10110

10111

-1010

11010

10101

10110

1-1列出-10+10带符号数的真值﹑原码﹑反码和补码。

1.2.2  BCD

人们习惯用十进制数表示数,但是在计算机中广泛使用二进制数,所以需要用二进制数对十进制数编码,即二-十进制码(Binary Code Decimal),也就是BCD码。这种码既有二进制数的形式,又有十进制数的特点,便于人们理解和数字系统的处理。

一个十进制数有09十个不同的数码,因此需要4位二进制数才能表示。但4位二进制数共有24=16种不同的表示方法,所以要从这16种表示法中取出10种来编码,于是出现了很多种编码方式。一般分为有权码和无权码,有权码是指4位二进制数中每一位都有自己对应的权,而无权码的4位二进制数中每一位则没有固定的权。常用的BCD码有842124215421等,为有权码;还有余三码、格雷码等,为无权码。下面分别介绍几种常见BCD码。

18421

8421是一种有权码,是最常见的BCD码。它用4位二进制数来表示1位等值的十进制数,且4位二进制数的权由高到低分别为:8421,因此在4位二进制数的16种组合中,只用到前10种,后面6种用不到,其编码表如表1-2所示。下面举例说明。

【例1-17将十进制数(69.2710转换为8421

解:将每位十进制数用4位二进制数表示出来。

6          9        2          7

                          

0110       1001     0010       0111

所以,(69.2710=01101001001001118421

22421

2421也是一种有权码,它的4位二进制数的权从高到低分别为:2421。若一个用2421编码的二进制数为X3X2X1X0,则它表示的十进制数X为:

X=2X3+4X2+2X1+1X0

其编码如表1-2所示。

1-2  常见BCD

十进制数

8421

2421

5421

0

0000

0000

0000

0011

1

0001

0001

0001

0100

2

0010

0010

0010

0101

3

0011

0011

0011

0110

4

0100

0100

0100

0111

5

0101

1011

1000

1000

续上表

十进制数

8421

2421

5421

6

0110

1100

1001

1001

7

0111

1101

1010

1010

8

1000

1110

1011

1011

9

1001

1111

1100

1100

35421

5421也是一种有权码,它的4位二进制数的权从高到低分别为:5421。若一个用5421编码的二进制数为X3X2X1X0,则它表示的十进制数X为:

X=5X3+4X2+2X1+1X0

其编码如表1-2所示。

4.余三码

余三码是一种无权码,它在数值上比84213,所以称为余三码,它可以用8421加上0011得到。其编码如表1-2所示。

5.格雷码

格雷码是一种很重要的BCD码,它是一种无权码。它最重要的特点是:任意两个相邻的格雷码之间,只有一位码元不同,它的这种特点使它在形成代码与传输中不容易出错,可靠性高。格雷码有很多形式,这里只介绍典型格雷码。典型格雷码不仅可以对十进制数编码,而且可以对任意二进制数编码。这里介绍用格雷码对二进制数编码的规则。

设二进制数:B=Bn-1Bn-2B1B0,对应的格雷码:G=Gn-1Gn-2G1G0,则有

Gi=Bi+1?Bi

即格雷码的第i位码可以由二进制码的第i和第i+1位码进行异或运算得到。异或运算的运算规则为:

0?0=0       0?1=1?0=1        1?1=0

1-3所示为二进制码与典型格雷码的转换关系。

1-3  二进制码与格雷码的转换关系

十进制数
二进制码
格雷码
N
B3
B2
B1
B0
G3
G2
G1
G0

0

0

0

0

0

0

0

0

0

0

0

1

1

0

0

1

1

0

0

0

1

0

1

0

1

0

0

0

0

1

0

0

0

1

2

0

0

1

1

3

0

0

1

0

4

0

1

1

0

5

0

1

1

1

续上表

十进制数
二进码
格雷码
N
B3
B2
B1
B0
G3
G2
G1
G0

6

0

1

1

0

0

1

0

1

7

0

1

1

1

0

1

0

0

8

1

0

0

0

1

1

0

0

9

1

0

0

1

1

1

0

1

10

1

0

1

0

1

1

1

1

11

1

0

1

1

1

1

1

0

12

1

1

0

0

1

0

1

0

13

1

1

0

1

1

0

1

1

14

1

1

1

0

1

0

0

1

15

1

1

1

1

1

0

0

0