1、1,3.2.3 定点数和浮点数 计算机中的两种表示方式,数值范围:一种数据类型所能表示的最大值和最小值 数据精度:实数所能表示的有效数字位数。 数值范围和数据精度均与使用多少位二进制位数以及编码方式有关。 计算机用数字表示正负,隐含规定小数点。采用“定点”、“浮点”两种表示形式。,2,1. 数的定点表示方法,(1). 定点整数小数点位置固定在数的最低位之后 如: Dn-1 Dn-2 D1 D0 . 范围: 2n-1 -1 -2n-1 (采用字长n=16位补码时其值为32767 -32768) (2). 定点小数小数点位置固定在数的符号位之后、数值最高位之前。如:D0. D-1 D-(n-2)
2、D-(n-1) 范围:1 - 2-(n-1) -1 (采用字长n=16位时其值为32767/32768 -1) 其中n表示字长多少位,3,(1) 浮点数的表示:是把字长分成阶码和尾数两部分。其根据就是: J Em-2.E0 S D-1D-(n-1)阶符 阶码值 数符 . 尾数值 S J Em-2 .E0 D-1D-(n-1)数符 阶符 阶码值 . 尾数值通常,阶码为补码或移码定点整数,尾数为补码或原码定点小数。,2. 数的浮点表示方法,4,(2)浮点数的规格化,目的:字长固定的情况下提高表示精度的措施:1 增加尾数位数(但数值范围减小)2 采用浮点规格化形式,5,规格化方法:调整阶码使尾数满足
3、下列关系: 尾数为原码表示时,无论正负应满足1/2 d -1,即 1.0x.x,6,例题:设某机器用32位表示一个实数,阶码部分8位(含1位阶符),用定点整数补码表示;尾数部分24位(含数符1位),用规格化定点小数补码表示,基数为2。则:,1. 求X=256.5 的第一种浮点表示格式X=(256. 5)10 =+(100000000.1)2 =+(0.1000000001 x 2+9 )28位阶码为:(+9)补=0000 100124位尾数为:(+0.10 0000 0001)补 =0.100 0000 0010 0000 0000 0000所求256.5的浮点表示格式为:0000 1001
4、0100 0000 0010 0000 0000 0000用16进制表示此结果则为:(09402000)16,7,Y=-(256. 5)10 =-(100000000.1)2 =-0.1000000001 x2+9 8位阶码为:(+9)补=0000 100124位尾数为:(-0.10 0000 0001)补 =1.011 1111 1110 0000 0000 0000所求-256.5的浮点表示格式为: 0000 1001 1011 1111 1110 0000 0000 0000用16进制表示此结果则为:(09BFE000)16,2. 求Y= -256.5 的第一种浮点表示格式,8,(3)
5、溢出问题,定点数的溢出根据数值本身判断浮点数的溢出根据规格化后的阶码判断 上溢浮点数阶码大于机器最大阶码中断 下溢浮点数阶码小于机器最小阶码零处理 溢出的具体判断方法将结合实例在后续课程中介绍,9,微机中所能表示的数值类型,(1)无符号二进制数(字节、字和双字) (2)带符号的二进制定点整数形式(16、32、64位补码表示)和18位BCD码整数形式(80bit)。 (3)浮点数(IEEE754标准) 包括数符S、阶码E和尾数D三个字段。,10,微机中的四种整数类型,整数类型 数值范围 精 度 格 式 16位整数 -3276832767 二进制16位 补码表示短整数 -231 231-1 二进制
6、32位 补码表示长整数 -263 263-1 二进制64位 补码表示 BCD整数 -1018+11018-1 十进制18位 80个二进制其中最左面1字节的最高位是符号位,余7位无效;另外72位是18位BCD码,原码表示。,11,IEEE754标准格式如下,(-1)S 2E (D0.D-1D-(P-1) 最高是数符S占1位,0表示正、1表示负;指数项E,基数是2,E是一个带有一定偏移量的无符号整数;尾数部分D,它是一个带有一位整数位的二进制小数真值形式。其规格化形式应调整阶码使其尾数整数位D0为1且与小数点一起隐含掉。,12,13,微机中浮点数表示成规格化形式,如下图所示:,单精度 31 30
7、23 22 0符号位 阶 码 尾数有效位1 双精度 63 62 52 51 0 符号位 阶 码 尾数有效位1 扩展精度 79 78 64 63 0 符号位 阶 码 尾数有效位微机中浮点数的三种表示形式,14,例如将十进制数178.125表示成微机中的单精度浮点数,解:178.125=10110010.001B=1.0110010001x27 指数E=7+127=134=10000110B 127是单精度浮点数应加的指数偏移量,其完整的浮点数形式为 :0 10000110 011 0010 0010 0000 0000 0000= 43322000H,15,例:将下面Pentium机中的单精度浮
8、点数表示成十进制真值是多少? 0011 ,1111,0101,1000,0000,0000,0000,0000,数符:S=(-1) 0=1 (正号) 阶码: E=(01111110)2-127=126-127= -1 尾数: D=(1.1011)2 X= 1.1011x2-1= (0.11011)2=0.84375,16,3.2.4 数字化信息的编码及表示,计算机进行数据处理和运算,就必须首先实现数字化表达。另外由于计算机除了数据处理和运算外,还要进行各种文字(特别是中文)的处理与编辑。因此,所有由计算机处理的信息也要用数字进行编码。这样在物理机制上可以以数字信号表示.,17,信息的数字化表示
9、形式,数字信号:是一种在时间上或空间上离散的信号,单个信号是常用的二值逻辑(0或1),依靠多位信号组合表示广泛的信息.,18,1.用一串脉冲信号表示数字代码 (先发低位后发高位为例),0,t,U,19,2.用一组电平信号表示数字代码,20,3.用一组数字代码表示字符(如ASCII码) 4.用若干点的组合表示图像(如图形点阵码) 5.用数字信号表示声音(如VCD DVD光盘) 6.用数字代码表示命令与状态,21,数字化方法表示信息的优点:,抗干扰能力强,可靠性高; 位数增多则数的表示范围可扩大; 物理上容易实现,并可存储; 表示信息的范围与类型极其广泛; 能用逻辑代数等数字逻辑技术进行处理.,2
10、2,3.3 二进制乘法运算,1.软件编程方法实现(时序控制乘法器)由手算到机器实现,要解决三个问题:符号问题、部分积相加进位问题、移位问题。原码乘法是先取绝对值相乘,再根据同号相乘为正、异号相乘位负,单独决定符号位。补码乘法则让符号位直接参加运算,算法将会复杂一些。 2.硬件快速乘法器实现利用中大规模集成电路芯片,在一拍节中实现多项部分积的相加,成为阵列乘法器。,23,3.3.1 定点数一位乘法 1. 定点原码一位乘,规则:在机器中采用A,B,C寄存器来分别存放部分积,被乘数和乘数 (1)在机器内一次加法操作只能求出两数之和,因此每求得一个相加数时,就得与上次部分积相加。(2)人工计算时,相加
11、数逐次向左偏移一位,由于最后的乘积位数是乘数(或被乘数)的两倍.由于在求本次部分积时,前一次部分积的最低位,不再参与运算,因此可将其右移一位。相加数可直送而不必偏移,于是用N位加法器就可实现两个N位数相乘。(3)部分积右移时乘数寄存器同时右移一位,这样可以用乘数寄存器的最低位来控制相加数(取被乘数或零),同时乘数寄存器的最高位可接收部分积右移出来的一位,因此,完成乘法运算后,A寄存器中保存乘积的高位部分,乘数寄存器C中保存乘积的低位部分。,24,例:设X=0.1101,Y=0.1011,求XY. 其中寄存器B=X ,Cd=4.流程图3.6 计算过程如下:,1(丢失)1(丢失)0(丢失)1(丢失
12、),XY=0.10001111,25,注意: 两操作数的绝对值相乘, 符号位单独处理。 寄存器A.B均设置双符号位,第1符号位始终是部分积符号,决定在右移时第1符号位补0 操作步数由乘数的尾数位数决定,用计数器Cd来计数。即作n次累加和移位。 最后是加符号位,根据SxSy决定。,26,2.定点补码一位乘法,实现补码乘法有两种方法,现在广泛使用的是Booth算法,也称为比较法。这种方法在机器实现中要在乘数末位Yi之后再增加一个附加位Yi+1,并令其初始值为0。然后根据比较Yi、 Yi+1的值决定下一步操作,规则如下:(部分积初始为0)Yi Yi+1 操 作0 0 原部分积右移一位0 1 原部分积
13、加X补后再右移一位1 0 原部分积加-X补后再右移一位1 1 原部分积右移一位,27,28,初始值与符号位:A寄存器存放部分累加和,初始为0,采用双符号位。第1符号位指示累加和的正负,以控制右移时补0或补1。B中存放被乘数的补码,双符号位。 基本操作:用C寄存器最末两位作判断位,决定下一步的操作。 移位:在右移时,第2符号位值移入位数的最高位,第1符号位值不变且移入第2符号位,而A寄存器末位移入C寄存器。 步数与最后一步操作:乘数有效位是4位,共作5步。注意,最后一步不移位因为这一步是用来处理符号位的。,29,3.4.1 定点除法运算,1.定点原码一位除法有恢复余数法和不恢复余数法(加减交替法
14、),计算机中常用后者。因为它的操作步骤少,而且也不复杂。其处理思想是:先减后判,如减后发现不够减,则在下一步改作加除数操作。这样操作步骤固定易于编程。其要点如下:(1)要求被除数|X|除数|Y|,并取原码尾数的绝对值相除;符号位单独处理,商的符号为相除两数符号的半加和。(2)被除数的位数可以是除数的两倍,其低位的数值部分开始时放在商寄存器中。运算中,放被除数和商的A、C寄存器同时移位,并将商寄存器C中最高位移到被除数寄存器A的最低位中。(3)每步操作后,可根据余数Ri符号来判断是否够减:Ri位正表明够减,上商Q为1。Ri为负表明不够减,上商Q为0。(4)基本操作可用通式描述为:Ri=2Ri+(
15、1-2Qi)Y(5原码除的思想是先当成正数相除,若最后一步所得余数为负,则应恢复余数,但不移位,以保持Ri为正。举例如下:,30,31,A寄存器中开始时存放被除数的绝对值,以后将存放各次余数,取双符号位。B寄存器存放除数的绝对值,取双符号位。C寄存器同来存放商,取单符号位。 第一步操作:将被除数X视为初始余数R0,根据R0符号位正(绝对值),令商符为0,正是的商符以后再置入。第一步为-Y。 商值则根据余数R0的符号来决定,正则商上1,求下一位商的办法是余数左移一位再减去除数;当余数为负则商上0,求下一位商的办法是余数左移一位再加上除数。左移位时末位补0。 操作步数与最后一步操作:如果要求得n位
16、商(不含符号位),则需作n步“左移-加减”循环;若第n步余数为负,则需增加一步恢复余数,这增加的一步不移位。,32,2.定点补码一位除法(加减交替法),补码除法规则表:X补、Y补、r补分别为被除数、除数和余数,33,以上是在|X|Y|即不溢出的前提下; (1)第一步如果被除数与除数同号,用被除数减去除数;若两数异号,用被除数加上除数。如果所得余数与除数同号上商1,若余数与除数异号,上商0,该商即为结果的符号位。 (2)求商的数值部分 如果上次上商1,将余数左移一位后减去除数;如果上次上商0,将余数左移一位后加上除数。然后判断本次操作后的余数,如果余数与除数同号上商1;若余数与除数异号上商0。如
17、此重复执行n-l次(设数值部分有n位)。 (3)商的最后一位一般采用恒置1的办法,井省略了最低位+1的操作,此时最大误差为士2-n.如果对商的精度要求较高则可按规则(2)再进行一次操作以求得商的第n位。当除不尽时若商为负,要在商的最低一位加 1,使商从反码值转变成补码值;若商为正最低位不需要加1。,34,例3.40:设X补=1.0111,Y补=0.1101,求X/Y补.-Y补=11.0011,计算过程如下:,X/Y补=1.0101,35,例3.40最低位恒置1,余数不正确。 A寄存器存放被除数(补码),以后存放余数,取双符号位。B寄存器存放除数(补码),双符号位。C寄存器存放商,初始值为0(未
18、考虑商符之前),单符号位。 如余数为0,则表示除尽。例3.41如采用商的最低位恒置1的方法,其误差为2-n=2-4。 补码除法规则表补充说明:1、表中i=0n-1. 2、上采用末位恒置1的方法,操作简便。如要提高精度,则要提高精度,则按上述规则多求一位,再采用以下方法对商进行处理:两数能除尽时,如除数为正,商不必加2-n, 如除数为负,商加2-n;两数除不尽时,如商为正,商不必加2-n, 如商为负,商加2-n 。,36,例3.42 X补=1.0111, Y补=1.0011, 则-Y补 =0.1101。求X/Y补=?被除数(余数) 商 操作说明11。0111 + 00。1101 两数同号,+-Y
19、补00。0100 0 余数与除数异号,商0左移 00。1000+ 11。0011 +Y补11。1011 01 同号,商1左移 11。0110+ 00。1101 +-Y补00。0011 010 异号,商0 左移 00。0110 + 11。0011 +Y补11。1001 0101 同号,商1左移 11。0010+ 00。1101 +-Y补11。1111 01011 同号,商1 X/Y补=0.1011 余数补=1。1111x2-4,37,3.5 浮点数的运算方法,浮点数的表示形式(以2为底):N = M 2E 其中,M为浮点数的尾数,一般为绝对值小于1的规格化二进制小数用原码或补码形式表示;E为浮点
20、数的阶码,一般是用移码或补码表示的整数。 阶码的底除了2以外,还有用8或16表示的,这里先以2为底进行讨论。然后再简介以8或16为底的数的运算。,38,1. 加、减法运算,两数首先均为规格化数,在进行规格化浮点数的加减运算需经过五步完成:对阶操作:低阶向高阶补齐,使阶码相等;尾数运算:阶码对齐后直接对尾数运算;结果规格化:对运算结果进行规格化处理;(使补码尾数的最高位和尾数符号相反)如溢出则需左规,如不是规格化时应右规。舍入操作:丢失位进行0舍1入或恒置1处理;判断溢出:判断阶码是否溢出,下溢则将运算结果置0,上溢则中断。,39,具体说明如下:,对阶运算(小阶向大阶对齐) 尾数为原码时,尾数右
21、移,符号位不动,最高位补0 尾数为补码时,尾数右移,符号也移位,最高位补符号位 例如: 求 =? 小阶对大阶 舍掉的是 如大阶对小阶 则舍掉的是,40,规格化:原码尾数高位为1,补码与符号相反 舍入操作:0舍1入 或 恒置1 例1:求 =?0舍1入后为 恒置1 例2:求 =?0舍1入后为 恒置1判断结果的正确性(即结果的阶码是否溢出),41,例:假设 其中指数和小数均为二进制真值,求X+Y=? 其阶码4位(含阶符),补码表示;尾数6位,补码表示,尾数符号在最高位,尾数数值5位。,解: 尾符 阶码 尾数5位X浮=0 0010 11010Y浮=1 0011 00010 对阶 X浮=0 0011 0
22、1101 尾数求和 00.01101+11.00010=11.01111 X浮+ Y浮=1 0011 01111 规格化、舍入操作、阶码溢出判断,最后:X+Y真=,42,例:假设 其中指数和小数均为二进制真值,求X-Y。其阶码4位(含阶符),补码表示;尾数6位,补码表示,尾数符号在最高位,尾数数值5位,解: 尾符 阶码 尾数X浮=0 0010 11010Y浮=1 0011 00010 对阶 X浮=0 0011 01101 尾数求差: X尾-Y 尾补=X 尾补+-Y 尾补=00.01101+00.11110=01.01011 规格化处理、舍入操作均不需要,阶码溢出检查:尾数符号位为01,尾数发生
23、上溢出,做规格化处理 尾数连同符号右移一位00.101011,阶码加1至0100 舍入操作恒置1后:X浮- Y浮=0 0100 10101 X-Y真=,43,3.5.2 浮点数的乘、除法运算,两浮点数相乘其乘积的阶码为相乘两数阶码之和,其尾数应为相乘两数的尾数之积。 两个浮点数相除,商的阶码为被除数的阶码减去除数的阶码得到的差,尾数为被除数的尾数除以除数的尾数所得的商。 参加运算的两个数都为规格化浮点数,乘除运算都可能出现结果不满足规格化要求的问题,因此也必须进行规格化、舍入和判溢出等操作。规格化时要修改阶码。,44,.浮点数乘法运算(阶码的底为8或16)前面的讨论,是以阶码值的底为2来进行的
24、。为了用相同位数的阶码表示更大范围的浮点数,在一些计算机中也有选用阶码的底为8或16的。此时浮点数N被表示成 N=8EM 或 N=16EM阶码E和尾数M还都是用二进制表示的,其运算规则与阶码以2为底基本相同,但关于对阶和规格化操作有新的相应规定。当阶码以8为底时,只要尾数满足18Ml 或 一1M一18就是规格化数。执行对阶和规格化操作时,每当阶码的值增或减1,尾数要相应右移或左移三位。当阶码以16为底时,只要尾数满足116M1或一1M一116就是规格化数。执行对阶和规格化操作时,阶码的值增或减1,尾数必须移四位。判别为规格化数或实现规格化操作,均应使数值的最高三项(以8为底)或四位(以16为底
25、)中至少有一位与符号位不同。5浮点数除法运算步骤与乘法运算类似,也分求商的阶码、尾数相除、规格化、舍入和判溢出5个步骤,不再详细讨论。,45,3.6运算部件,1.定点运算部件定点运算部件由算术逻辑运算部件ALU、若干个寄存器、移位电路、计数器、门电路等组成。ALU部件主要完成加减法算术运算及逻辑运算(其功能可参考 2 4 2节),其中还应包含有快速进位电路。 2.浮点运算部件通常由阶码运算部件和尾数运算部件组成。其各自的结构与定点运算部件相似。但阶码部分仅执行加减法运算。其尾数部分则执行加减乘除运算,左规时有时需要左移多位。为加速移位过程,有的机器设置了可移动多位的电路。,46,3.7 计算机
26、中的数据校验方法,采用冗余校验方法:即在基本的有效数据外,再扩充部分位,增加部分(冗余部分)被称为校验位。将校验位与数据位一起按某种规则编码,写入存储器或向外发送。当从存储器读出或接收到外部传入的代码时,再按相应的规则进行判读。若约定的规则被破坏,则表示出现错误。根据错误的特征进行修正恢复。,47,几个名词概念:码字:由若干代码组成的一个字。 如8421码中6(0110),7(0111) 码距:一种码制中任意两个码字间的最小距离。 距离:两个码字之间不同的代码个数。8421码中,最小的码距为1,如0000和0001、0010和0011等;最大码距为4,如0111和1000。8421码的码距为1
27、。 码距为1,即不能查错也不能纠错。 码距越大,查错、纠错能力越强。,48,3.7.1 奇偶校验法,奇偶校验法是计算机中广泛采用的检查传输数据准确性的方法。奇偶校验法的原理是:在每组数据信息上附加一个校验位,校验位的取值(0或1)取决于这组信息中1的个数和校验方式(奇或偶校验)。如果采用奇校验,则这组数据加上校验码位后数据中1的个数应为奇数个。如果采用偶校验,则这组数据加上校验码位后数据中1的个数应为偶数个。,49,例如:八位信息10101011中共有5个1,附加校验位后变为九位。若采用奇校验,则附加的校验位应取0值,保证1的个数为奇数个即 0 10101011 ;若采用偶校验则附加的校验位应
28、取1值即 1 10101011 。奇偶校验的特点:1、奇偶校验法使数据的码距为2,因而可检出数据传送过程中奇数个数位出错的情况; 2、实际中两位同时出错的概率极低,奇偶校验法简便可靠易行,但它只能发现错误,却不知错在何处,因而不能自动纠正。,50,D校D1 D2 D3 D4D5 D6 D7 D8,8位数据的奇偶校验码形成电路及检码电路,51,3.7.2 海明码校验方法,海明码校验方法以奇偶校验法为基础,其校验位不是一个而是一组,故其码距大于2 。 海明码校验方法能够检测出具体错误并纠正。 原理是在数据中加入r个校验位,将数据的码距按照一定规则拉长。r个校验位可以表示2r个信息,除一个表示无误信
29、息外,其余2r-1信息可以用来标明错误的具体位置,但由于校验位本身也可能在传送中出错,所以只有2r-1-r个信息可用,即r位校验码只可标明2r-1-r个错误信息。或2rk+r+1 k是被传送数据的位数。例如:用4个校验位能可靠传输24-1-4=11位信息;而要校验32位数据则需至少6个校验位。,52,如要能检测与自动校正一位错井发现两位错此时校验位的位数r和数据位的位数k应满足下述关系: 2r-1 k+r (3. 19)按式(3.19),可计算出数据位k与校验位r的对应关系,如教材表3.8所示。,53,一、编码方法(以四个校验位进行说明),四个校验位最多可以校验11位数据。设:D10D9D8D
30、7D6D5D4D3D2D1D0为11个数据位,P4P3P2P1分别为四个校验码,则编码规则是: 海明码的总位数等于数据位与校验位之和; 每个校验位Pi排放在2i-1的位置,例如P4排放在第24-1=8位,其余数据位依序排列。即:D10D9D8D7D6D5D4P4D3D2D1P3D0P2P1 海明码的每一位用多个校验位一起进行校验,被校验的位号等于校验它的各校验位位号和; 各校验位的值为它参与校验的数据位的异或。,54,海明码校验表,55,各校验位形成公式:P1=D0D1D3D4D6D8D10 (1) P2=D0D2D3D5D6D9D10 (2)P3=D1D2D3D7D8D9D10 (3)P4=
31、D4D5D6D7D8D9D10 (4)按上述方式Pi的取值是采用偶校验时的取值,当采用奇校验时,Pi则取反。这样Pi连同数据位一起形成了海明码的各位。,56,二、检查纠错(以四个校验位进行说明),海明码数据传送到接收方后,再将各校验 位的值与它所参与校验的数据位的异或结果进 行异或运算。 运算结果称为校验和。校验和共 有四个。对偶校验来说,如果校验和不为零则传输 过程中间有错误。而错误的具体位置则由四个 校验和依序排列后直接指明。如果四个校验和S4S3S2S1 依序排列后等于(1001)2=(9)10 时,就 表明海明码的第九位也就是D4发生了错误,此 时只要将D4取反,也就纠正了错误。,57
32、,校验和Si的表达式:S1 =D0D1D3D4D6D8D10 P1 S2 = D0D2D3D5D6D9D10 P2 S3 =D1D2D3D7D8D9D10 P3S4 =D4D5D6D7D8D9D10 P4当采用偶校验方式其传送数据正确时,校验和 S1 S4的值分别都为0;当采用奇校验方式其传送数据正确时,校验和 S1 S4的值分别都为1。当不为上述值时,传送就发生了错误。,58,解:已知D10D9D8D7D6D5D4D3D2D1D0=10110100110由于被校验位的位号等于校验它的各校验位位号 之和以及各校验位的取值等于它参与校验的数据位取 值的异或。所以校验位的取值以及所求海明码为:P1
33、=D0D1 D3 D4 D6 D8 D10=1P2=D0 D2 D3 D5 D6 D9 D10=1P3=D1 D2 D3 D7 D8 D9 D10=1P4=D4 D5 D6 D7 D8 D9 D10=0 D10D9D8D7D6D5D4P4D3D2D1P3D0P2P1=101101000111011 传送正确时校验和的值为0,如果不等于0,则是几就是 第几位出错,是7则是第7位D3出错,此时将其取反即可 纠正错误。,例题:采用4位校验位、偶校验方式,写出10110100110的海明码。,59,60,以上 图3.11是H=12,数据位k=8,校验位 r=4的海明校验线路,记作(l2.8)分组码。图
34、3.ll中的H12,H11,.,H1是被校验码,D8,D7,.,D1是纠正后的数据。在线路中,先用奇偶形成线路得到S4,S3,S2,S1,如果S4S1为全“0”,说明代码无错,则D8D7.DI=H12H11H10H9H7H6H5H3。如果S4S1不为全0,说明有错。若为1100或1011,则分别表示H12或Hll位错,对应这两种出错情况,相关的两条译码线之一为“l”,它与相应的数据使经异或线路,就把该位校正过来,得到正确编码输出。依此类推如S4S3S2S1为1010,1001,0111,0110,0101或0011,分别表示H10,H9,H7,H6,H5或H3位错,用相同的方法予以纠正、如错误
35、发生在校验位上。则相关的译码线(1000,0l00,0010,0001)之一为l,在图3 11中未画出。如前所述,假如要进一步判别是1位错还是2位错,则再增加一个校验位、并用图 3.12来取代图3.11虚框中的内容,此时增加了一个奇偶形成线路S5。如为一位错,仍按图3.11来纠正数据位;如为两位错,则无法纠正错误。,61,3.7.3 循环冗余校验方法(CRC码),循环冗余校验方式:通过某种数学公式建立信息位和校验位之间的约定关系能够校验传送信息的对错,并且能自动修正错误。广泛用于通信和磁介存储器中。 CRC编码格式是在k位信息后加r位检验码。 N N-1 2 1信息位(k位) 校验位(r位),
36、C1 C2 . C K r 1 r 2 r i,62,1、CRC码的编码方法,CRC整个编码长度为 n=k+r 位,故CRC码又叫 (n,k)码。其编码方法如下:假设被传送的k位二进制信息位用C(x)表示, 系统选定的生成多项式用G(X)表示,将C(x)左移 G(X)的最高次幂(即等于需要添加的校验位的位数r),写作 C(x) 2 r 然后将其C(x) 2 r除以生成多项式G(x),所得商用Q(x)表示,余数用R(x)表示。则:两边同时乘以G(x)并左移 R(x) 得到:,63,故有: 上式中,等式左边即为所求的n位CRC码,其 中余数表达式R(x)就是校验位(r位)。且等式两 边都是G(x)
37、的倍数。发送信息时将等式左边生成的n位CRC码送给对 方。当接收方接到n位编码后,同样除以G(x),如 果传输正确则余数为0,否则则可以根据余数的数值确定是哪位数据出错。,由于CRC编码采用的加、减法是按位加减法, 即不考虑进位与借位,运算规则为:00=0,01=1,10=1,11=0,64,例:有一个(7,4)码(即CRC码为7位,信息码为4位),已确定生成多项式为: G(X)=X3+X+1= 1011 被传输的信息C(x)=1001,求C(x)的CRC码。,解:C(x)左移 r = nk = 3 位即: 将上式模2采用除法 除以给定的 G(x)=1011:1001000/1011=1010
38、+110/1011 得到余数表达式:R(x) =110 所求CRC码为:,65,(A),(B),66,2、CRC码的查错表,收到的CRC码除以约定的生成多项式G(x),如果余数为0则传输无误,否则传输错误,根据所得余数值就可找出错误并取反纠正。上表详细说明了CRC码1001110在传送时某一位出 错后的判断与纠正方法 C(X) = 1001、 G (x) =1011 。,67,3、生成多项式G(x)的确定,G(x)是一个约定的除数,用来产生校验码。 从检错和纠错的要求出发,它并不是随意 选择的,它应满足下列要求:任何一位发生错误都应使余数不为0 不同位发生错误应使余数不同 余数继续模2 除,应
39、使余数循环,68,4. CRC的译码与纠错将收到的循环校验码用约定的生成多项式G(x)去除,如果码字无误则余数应为0,如有某一位出错,则余数不为0,不同位数出错余数不同。通过例 3.49求出其出错模式如表 3.10所示、更换不同的待测码字可以证明:余数与出错位的对应关系是不变的,只与码制和生成多项式有关、因此表 3.10给出的关系可作为(7,4)码的判别依对于其他码制或选用其他生成多项式,出错模式将发生变化。如果循环码有一位出错,用G(x)作模2除将得到一个不为0的余数、如果对余数补1个0继续除下去我们将发现一个现象;各次余数将按表3.10顺序循环、例如第七位出错,余数将为OO1,补0后再除,第二次余数为010,以后依次为100,011,.,反复循环,这是一个有价值的特点。如果我们在求出余数不为0后,一边对余数补0继续做模2除,同时让被检错的校验码字循环左移。表 3.10说明当出现余数(101)时,出错位也移到A1位置、对通过异或门将它纠正后在下一次移位时送回A1。继续移满一个循环(对74码共移七次),就得到一个纠正后的码字。这样我们就不必像海明校验那样用译码电路对每一位提供纠正条件、当位数增多时循环码校验能有效地降低硬件代价。,