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