1、第1章 数制与编码 第第1章章 数制与编码数制与编码 1.1 数字逻辑电路概述数字逻辑电路概述 1.2 数制数制 1.3 编码编码 第1章 数制与编码 1.1 数字逻辑电路概述数字逻辑电路概述 自然界的各种物理量可分为模拟量和数字量两大类。模拟量在时间上是连续取值,幅值上也是连续变化的,表示模拟量的信号称为模拟信号,处理模拟信号的电子电路称为模拟电路。数字量是一系列离散的时刻取值,数值的大小和每次的增减都是量化单位的整数倍,即它们是一系列时间离散、数值也离散的信号。表示数字量的信号称为数字信号。处理数字信号的电子电路称为数字电路。第1章 数制与编码 数字电路的一般框图如图 1.1.1 所示,它
2、有 n 个输入1X,2X,nX和 m 个输出1F,2FmF,此外还有一个定时信号,即时钟脉冲信号(Clock)。对于每一个输入iX和输出jF都是时间和数值上离散的二值信号,用数字 0 和1 来表示。在数字电路和系统中,可以用 0 和 1 组成的二进制数码表示数量的大小,也可以用0 和 1 表示两种不同的逻辑状态。当用 0 和 1 表示客观事物两种对立的状态时,它已不表示数值了,而是表示逻辑 0 和逻辑 1,这两种对立的逻辑状态称为二值数字逻辑或简称为数字逻辑。数字电路的输出与输入之间满足一定的逻辑关系,因而数字电路也称为逻辑电路。第1章 数制与编码 图1.1.1 数字电路系统框图 第1章 数制
3、与编码 数字电路中的电子器件都工作在开关状态,电路的输出只有高、低两个电平,因而很容易实现二值数字逻辑。在分析实际电路时,逻辑高电平和逻辑低电平都对应一定的电压范围,不同系列的数字集成电路,其输入、输出为高电平或低电平所对应的电压范围是不同的(参看第3章)。一般用逻辑高电平(或接电源电压)表示逻辑1和二进制数的1,用逻辑低电平(或接地)表示逻辑0和二进制数的0。在数字电路中,当用高电平表示逻辑1,低电平表示逻辑0时称为正逻辑;当用低电平表示逻辑1、高电平表示逻辑0时称为负逻辑,通常情况下数字电路使用正逻辑。第1章 数制与编码 数字电路的输入、输出逻辑电平随时间变化的波形称为数字波形。数字波形有
4、两种类型,一种是电位型(或称非归零型),另一种是脉冲型(或称归零型)。在波形图中,一定的时间间隔T称为1位(1bit)或一拍。电位型的数字波形在一拍时间内用高电平表示1,低电平表示0,脉冲型数字波形则在一拍时间内以脉冲有无来表示1和0。图1.1.2是表示01001101100序列信号两种数字波形,其中图(a)为电位型表示的波形,图(b)是脉冲型表示的波形。第1章 数制与编码 图1.1.2 序列信号的两种数字波形(a)电位型的数字波形;(b)脉冲型的数字波形 第1章 数制与编码 数字电路和系统的输入、输出逻辑关系(功能或行为)通常可以用文字、真值表、逻辑函数表达式、逻辑电路图、时序图、状态图、状
5、态表和硬件描述语言等多种形式进行描述。在众多描述中,将文字描述的逻辑命题采用真值表、状态表(或图)描述的过程称为逻辑抽象,它是逻辑设计中关键的一步。有关数字系统的各种描述形式我们将在后续章节介绍。第1章 数制与编码 数字电路系统只能处理用二进制数表示的数字信号,而人们习惯用的十进制数不能直接被数字电路系统接收。因此,在进行人与数字电路系统交换信息时,需要把十进制数转换成二进制数,当数字系统运行结束时,为了便于人们阅读,又需要将二进制数再转换成十进制数。所以为了便于信息交换和传输,我们需要研究各种数制之间的转换及不同的编码方式。第1章 数制与编码 1.2 数数 制制 1.1.1 进位计数制进位计
6、数制 按进位的原则进行计数,称为进位计数制。每一种进位计数制都有一组特定的数码,例如十进制数有 10 个数码,二进制数只有两个数码,而十六进制数有 16 个数码。每种进位计数制中允许使用的数码总数称为基数或底数。在任何一种进位计数制中,任何一个数都由整数和小数两部分组成,并且具有两种书写形式:位置记数法和多项式表示法。第1章 数制与编码 1.十进制数十进制数(Decimal)采用 10 个不同的数码0、1、2、9和一个小数点(.)。进位规则是“逢十进一”。若干个数码并列在一起可以表示一个十进制数。例如在435.86这个数中,小数点左边第一位的5代表个位,它的数值为5;小数点左边第二位的 3 代
7、表十位,它的数值为3101;左边第三位的 4 代表百位,它的数值为4102;小数点右边第一位的值为810-1;小数点右边第二位的值为610-2。可见,数码处于不同的位置,代表的数值是不同的。这里102、101、100、10-1、10-2 称为权或位权,即十进制数中各位的权是基数 10 的幂,各位数码的值等于该数码与权的乘积。因此有 第1章 数制与编码 2101210610810510410486.435上式左边称为位置记数法或并列表示法,右边称为多项式表示法或按权展开法。一般,对于任何一个十进制数N,都可以用位置记数法和多项式表示法写为 1221100112211210121101010101
8、010101010)(nmiiimmnnnnmnnaaaaaaaaaaaaaaaN第1章 数制与编码 式中,n代表整数位数,m代表小数位数,ai(-min-1)表示第i位数码,它可以是0、1、2、3、9 中的任意一个,10i为第i位数码的权值。上述十进制数的表示方法也可以推广到任意进制数。对于一个基数为R(R2)的R进制计数制,数N可以写为 1221100112211210121)(nmiiimmnnnnmnnRRaRaRaRaRaRaRaRaaaaaaaaN式中,n代表整数位数,m代表小数位数,ai为第i位数码,它可以是0、1、(R-1)个不同数码中的任何一个,Ri为第i位数码的权值。(1-
9、2)第1章 数制与编码 2.二进制数二进制数 二进制数的进位规则是“逢二进一”,其进位基数R=2,每位数码的取值只能是0或1,每位的权是2的幂。表1.2.1列出了二进制位数、权和十进制数的对应关系。表表1.2.1二进制位数、权和十进制数的对应关系二进制位数、权和十进制数的对应关系 二进制位数 13 12 11 10 9 8 7 6 5 4 3 2 1 122 112 102 92 82 72 62 52 42 32 22 12 02 权(十进制表示)4096 2048 1024 512 256 128 64 32 16 8 4 2 1 二进制位数-1-2-3-4-5-6 12 22 23 24
10、 25 26 权(十进制表示)0.5 0.25 0.125 0.0625 0.03125 0.015625 第1章 数制与编码 任何一个二进制数可表示为 1221100112211210121222222222)(nmiiimmnnnnmnnaaaaaaaaaaaaaaaN例如:1032101232)375.11(21212021212021)011.1011(第1章 数制与编码 二进制数却有以下优点:因为它只有0、1 两个数码,在数字电路中利用一个具有两个稳定状态且能相互转换的开关器件就可以表示一位二进制数,因此采用二进制数的电路容易实现,且工作稳定可靠。算术运算规则简单。二进制数的算术运算
11、和十进制数的算术运算规则基本相同,惟一区别在于二进制数是“逢二进一”及“借一当二”,而不是“逢十进一”及“借一当十”。第1章 数制与编码 例如:例如:第1章 数制与编码 3.八进制数八进制数(Octal)八进制数的进位规则是“逢八进一”,其基数R=8,采用的数码是0、1、2、3、4、5、6、7,每位的权是 8 的幂。任何一个八进制数也可以根据式(1-2)表示为 188)(nmiiiaN例如:1010128)5.254(5.068764384868783)4.376(第1章 数制与编码 4.十六进制数十六进制数(Hexadecimal)十六进制数的特点是:采用的 16 个数码为0、1、2、9、A
12、、B、C、D、E、F。符号AF分别代表十进制数的1015。进位规则是“逢十六进一”,基数R=16,每位的权是16的幂。任何一个十六进制数,也可以根据式(1-2)表示为 11616)(nmiiiaN102101216)0664.939(16116116111610163)113(AB例如:第1章 数制与编码 1.2.2 进位计数制之间的转换进位计数制之间的转换 1.2.2 进位计数制之间的转换进位计数制之间的转换1二进制数与十进制数之间的转换二进制数与十进制数之间的转换1)二进制数转换成十进制数按权展开法二进制数转换成十进制数时,只要二进制数按式(1-3)展开,然后将各项数值按十进制数相加,便可
13、得到等值的十进制数。例如:10211242)75.22(2121212121)11.10110(同理,若将任意进制数转换为十进制数,只需将数(N)R写成按权展开的多项式表示式,并按十进制规则进行运算,便可求得相应的十进制数(N)10。第1章 数制与编码 2)十进制数转换成二进制数 (1)整数转换除2取余法。若将十进制整数(N)10转换为二进制整数(N)2,则可以写成 01011232110011221110222222222)(aQaaaaaaaaaNnnnnnnnn )(如果将上式两边同除以2,所得的商为)222(11232211aaaaQnnnn 余数就是a0。第1章 数制与编码 同理,这
14、个商又可以写成 34212222nnnnQaaa 显然,若将上式两边再同时除以2,则所得余数是a1。重复上述过程,直到商为0,就可得二进制数的数码a0、a1、an-1。余数a1。第1章 数制与编码 例如,将(57)10转换为二进制数:故 第1章 数制与编码 (2)小数转换乘2取整法。若将十进制小数(N)10转换为二进制小数(N)2,则可以写成 mmaaaN 222)(221110将上式两边同时乘以2,便得到 111012112()(22)mmNaaaaF可见,2(N)10乘积的整数部分就是a-1,小数部分就是F1。若将2(N)10乘积的小数部分F1再乘以2,则有1221234222(222)m
15、mFaaaaaF第1章 数制与编码 所得乘积整数部分就是a-2,小数部分为F2。显然,重复上述过程,便可求出二进制小数的各位数符a-1,a-2,a-m。例如,将(0.724)10转换成二进制小数。第1章 数制与编码 应指出,小数部分乘2取整的过程不一定能使最后乘积为0,因此转换值存在一定的误差。通常在二进制小数的精度已达到预定的要求时,运算便可结束。将一个带有整数和小数的十进制数转换成二进制数时,必须将整数部分和小数部分分别按除2取余法和乘2取整法进行计算,然后将两者的转换结果合并起来。同理,若将十进制数转换成任意R进制(N)R,则整数部分转换采用除R取余法,小数部分采用乘R取整法。第1章 数
16、制与编码 2.二进制数与八进制数、十六进制数之间的相互转换二进制数与八进制数、十六进制数之间的相互转换 八进制数和十六进制数的基数分别为8=23,16=24,所以三位二进制数恰好相当一位八进制数,四位二进制数相当一位十六进制数,它们之间的相互转换是很方便的。二进制数转换成八进制数的方法是从小数点开始,分别向左、向右,将二进制数按每三位一组分组(不足三位的补0),然后写出每一组等值的八进制数。例如,求(01101111010.1011)2的等值八进制数:第1章 数制与编码 例如,求(01101111010.1011)2的等值八进制数:二进制 001 101 111 010 .101 100 八进
17、制 1 5 7 2 .5 4 所以 (01101111010.1011)2=(1572.54)8 二进制数转换成十六进制数的方法和二进制数与八进制数的转换相似,从小数点开始分别向左、向右将二进制数按每四位一组分组(不足四位补0),然后写出每一组等值的十六进制数。第1章 数制与编码 例如,将(1101101011.101)转换为十六进制数:00 11 01 10 10 11 .10 103 6 B .A 所以 (1101101011.101)2=(36B.A)16 八进制数、十六进制数转换为二进制数的方法可以采用与前面相反的步骤,即只要按原来顺序将每一位八进制数(或十六进制数)用相应的三位(或四
18、位)二进制数代替即可。例如,分别求出(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章 数制与编码 1.3 编编 码码 1.3.1带符号数的编码带符号数的编码在数字系统中,需要处理的不仅有正数,还有负数。为了表示带符号的二进制数,在定点整数运算的情况下,通常以代码的最高位作为符号位,
19、用0表示正,用1表示负,其余各位为数值位。代码的位数称为字长,它的数值称为真值。带符号的二进制数可以用原码、反码和补码几种形式表示。第1章 数制与编码 1.原码原码原码的表示方法是:符号位加数值位。例如,真值分别为+62和-62,若用8位字长的原码来表示,则可写为 N=+D62=+011111B0 原N=00111110 N=-6D2=-011111B0 原N=10111110 原码表示简单、直观,而且与真值转换方便,但用原码进行减法运算时,电路结构复杂,不容易实现,因此引入了反码和补码。第1章 数制与编码 2.反码反码 反码的表示方法是:正数的反码与其原码相同,即符号位加数值位;负数的反码是
20、符号位为 1,数值位各位取反。例如,真值分别为+45 和-45,若用 8 位字长的反码来表示则可写为 0010110145原 0010110145反 1010110145原 1101001045反 第1章 数制与编码 3.补码补码 字长为 n 的整数 N 的补码定义是:补N=022)2(mod2011NNNNnnnn 由于 2n-1 是 n 位全为1 的二进制数,而 2n比(2n-1)多 1,所以求一个数的补码可以用以下简便方法:(1)正数和 0的补码与原码相同。(2)负数的补码是将其原码的符号位保持不变,对数值位逐位求反,然后在最低位加1。第1章 数制与编码 此外,应注意:n位字长的二进制原
21、码、反码、补码所表示的数值范围是:原码:)12(1n)12(1n 反码:)12(1n)12(1n 补码:12n)12(1n (不含-0)例如,4 位字长的原码、反码其数值表示范围均为-7+7,而补码的范围则为-8+7;+0的原码、反码、补码均为0000,-0只有原码(1000)和反码(1111),而没有补码;-8只有补码(1000),而没有原码和反码。第1章 数制与编码【例1.3.1】已知十进制数+6和-5,试分别用4位字长和8位字长的二进制补码来表示。解解:(1)n=4:(1)n=4 01106原 01106补 11015原 10115补 (2)n=8 000001106原 00000110
22、6补 100001015原 111110115补 第1章 数制与编码【例1.3.2】已知4位字长的二进制补码分别为0011、1011、1000,试求出相应的十进制。解:解:(1)0011补X,符号位为0 0011原X X=+3(2)1011补X,符号位为 1 11011011补原X X=-5(3)1000补X,符号位为1 它是 4 位负数补码的最大值,没有原码,故 X=-8 第1章 数制与编码 4补码的运算补码的运算在数字系统中,求一个数的反码和补码都很容易,而且利用补码可以方便地进行带符号二进制数的加、减运算。若X、Y均为正整数,则X-Y的运算可以通过X补+-Y补来实现,这样将减法运算变成了
23、加法运算,因而简化了电路结构。采用补码进行加、减法运算的步骤如下:(1)根据XY补=X补+Y补,分别求出X补、Y补和X+Y补。(2)补码相加时,符号位参与运算,若符号位有进位,则自动舍去。(3)根据XY补的结果求出XY原,进而求出XY的结果。第1章 数制与编码 4 补码的运算补码的运算 在数字系统中,求一个数的反码和补码都很容易,而且利用补码,可以方便地进行带符号二进制数的加、减运算。若 X、Y均为正整数,X-Y的运算可以通 补补YX 来实现,这样将减法运算变成了加法运算,因而简化了电路结构。采用补码进行加减法运算的步骤如下:(1)根据 补补补YXYX,分别求出 补X,补Y和补YX (2)补码
24、相加时,符号位参与运算,若符号位有进位,则自动舍去。(3)根据补YX 的结果求出原YX,进而求出 XY的结果。第1章 数制与编码【例 1.3.3】试用 4 位字长的二进制补码完成下列运算 7-5 3-4 解:01117补 10115补 00113补 11004补 补7+补5为 第1章 数制与编码 3补+-4补为 即 11114343补补补,符号位为 1 100143原 故 3-4=-1 必须指出,两个补码相加时,如果产生的和超出了有效数字位所表示的范围,则计算结果会出错,之所以发生错误是因为计算结果产生了溢出,解决的办法是扩大字长。第1章 数制与编码 1.3.2 二二十进制编码十进制编码(BC
25、D码码)二十进制编码是用四位二进制码的10 种组合表示十进制数09,简称BCD码(Binary Coded Decimal)。这种编码至少需要用四位二进制码元,而四位二进制码元可以有 16 种组合。当用这些组合表示十进制数09时,有六种组合不用。由 16 种组合中选用 10 种组合,有 101016109.2)!1016(!16A第1章 数制与编码 表1.3.1 几种常用的 BCD 码 十进制数 8421 码 5421 码 2421 码 余 3 码 BCD Gray 码 0 1 2 3 4 5 6 7 8 9 0000 0001 0010 0011 0100 0101 0110 0111 10
26、00 1001 0000 0001 0010 0011 0100 1000 1001 1010 1011 1100 0000 0001 0010 0011 0100 1011 1100 1101 1110 1111 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 0000 0001 0011 0010 0110 0111 0101 0100 1100 1000 第1章 数制与编码 1.8421 BCD码码 8421 BCD码是最基本和最常用的BCD码,它和四位自然二进制码相似,各位的权值为8、4、2、1,故称为有权BCD码。和四位自然二进制码
27、不同的是,它只选用了四位二进制码中前 10 组代码,即用00001001分别代表它所对应的十进制数,余下的六组代码不用。第1章 数制与编码 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只列出了一种
28、编码方案。表1.3.1中2421 BCD码的 10 个数码中,0和9、1和8、2和7、3和6、4和5的代码的对应位恰好一个是0时,另一个就是1。我们称0和9、1和8互为反码。因此2421 BCD码具有对9互补的特点,它是一种对9的自补代码(即只要对某一组代码各位取反就可以得到9的补码),在运算电路中使用比较方便。第1章 数制与编码 3.余余3 码码 余 3 码是8421 BCD码的每个码组加3(0011)形成的。余 3 码也具有对 9 互补的特点,即它也是一种 9 的自补码,所以也常用于BCD码的运算电路中。用BCD码可以方便地表示多位十进制数,例如十进制数(579.8)10可以分别用8421
29、 BCD码、余 3 码表示为 码余码3842110)1011.110010101000()1000.100101110101()8.579(BCD第1章 数制与编码 1.3.3可靠性编码可靠性编码代码在形成、传输过程中可能会发生错误。为了减少这种错误,出现了可靠性编码。常用的可靠性编码有以下两种。1Gray码(格雷码)码(格雷码)Gray码最基本的特性是任何相邻的两组代码中,仅有一位数码不同,即具有相邻性,因此又称单位距离码。此外,Gray码的首尾两个码组也有相邻性,因此又称循环码。Gray码的编码方案有多种,典型的Gray码如表1.3.2所示。第1章 数制与编码 表1.3.2 典型的 Gra
30、y 码 十进制数 二进制码 Gray 码 B3 B2 B1 B0 G3 G2 G1 G0 0 0 0 0 0 0 0 0 0 一位反射对称轴 1 0 0 0 1 0 0 0 1 二位反射对称轴 2 0 0 1 0 0 0 1 1 3 0 0 1 1 0 0 1 0 .三位反射对称轴 4 0 1 0 0 0 1 1 0 5 0 1 0 1 0 1 1 1 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
31、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 第1章 数制与编码 从表1.3.2中可以看出,这种代码除了具有单位距离码的特点外,还有一个特点就是具有反射特性,即按表中所示的对称轴为界,除最高位互补反射外,其余各位沿对称轴镜像对称。利用这一反射特性可以方便地构成位数不同的Gray码。Gray码的单位距离特性有很重要的意义。例如,两个相邻的十进制数13和14相应的二进制码为1101和1110,在用二进制数作加1计数时,如果从13变为14,则二进制码的最低两位都要改变,但实际上两位改变不可能同时发生,
32、若最低位先置0,然后次低位再置1,则中间会出现110111001110,即出现暂短的误码1100,而Gray码只有一位变化,因而杜绝了出现这种错误的可能。第1章 数制与编码 2奇偶校验码奇偶校验码奇偶校验码是一种能够检测出信息在传输中产生奇数个码元错误的代码,它由信息位和检验位两部分组成。信息位是位数不限的任何一种二进制代码。校验位仅有一位,它可以放在信息位的前面,也可以放在信息位的后面。其编码方式有以下两种:(1)使得一组代码中信息位和校验位“1”的个数之和为奇数,称为奇校验;(2)使得一组代码中信息位和校验位“1”的个数之和为偶数,称为偶校验。第1章 数制与编码 表1.3.3 带奇偶检验的
33、 8421 BCD 码 十进制数 8421 BCD 奇检验 8421 BCD 偶检验 信息位 检验位 信息位 检验位 0 0000 1 0000 0 1 0001 0 0001 1 2 0010 0 0010 1 3 0011 1 0011 0 4 0100 0 0100 1 5 0101 1 0101 0 6 0110 1 0110 0 7 0111 0 0111 1 8 1000 0 1000 1 9 1001 1 1001 0 第1章 数制与编码 接收端对接收到的奇偶校验码进行检测时,只需检查各码组中“1”的个数是奇数还是偶数,就可以判断代码是否出错。奇偶校验码只能检查出奇数个代码出错,但不能确定是哪一位出错。因此,它没有纠错能力。但由于它编码简单,设备量少,而且在传输中通常一位码元出错的概率最大,因此该码被广泛采用。第1章 数制与编码 1.3.4 字符代码字符代码 表表 1.3.4 ASCII码码 第1章 数制与编码 ASCII码采用七位二进制数编码,因此可以表示1 2 8 个 字 符。从 表 中 可 见,数 字 0 9,相 应 用01100000111001来表示,B8通常用作奇偶检验位,但在机器中表示时,常使其为0,因此09的ASCII码为 30H39H,大写字母AZ的ASCII码为41H5AH等。