模2运算是一种二进制算法,CRC校验技术中的核心部分,因此,我们在分析CRC算法之前,必须掌握模2运算的规则。与四则运算相同,模2运算也包括模2加、模2减、模2乘、模2除四种二进制运算。而且,模2运算也使用与四则运算相同的运算符,即“+”表示模2加,“-”表示模2减,“×”或“·”表示模2乘,“÷”或“/”表示模2除。与四则运算不同的是模2运算不考虑进位和借位,即模2加法是不带进位的二进制加法运算,模2减法是不带借位的二进制减法运算。这样,两个二进制位相运算时,这两个位的值就能确定运算结果,不受前一次运算的影响,也不对下一次造成影响。
①模2加法运算定义为:
0+0=0 0+1=1 1+0=1 1+1=0
例如0101+0011=0110,列竖式计算:
0 1 0 1
+0 0 1 1
──────
0 1 1 0
②模2减法运算定义为:
0-0=0 0-1=1 1-0=1 1-1=0
例如0110-0011=0101,列竖式计算:
0 1 1 0
-0 0 1 1
──────
0 1 0 1
③模2乘法运算定义为:
0×0=0 0×1=0 1×0=0 1×1=1
多位二进制模2乘法类似于普通意义上的多位二进制乘法,不同之处在于后者累加中间结果(或称部分积)时采用带进位的加法,而模2乘法对中间结果的处理方式采用的是模2加法。例如1011×101=100111,列竖式计算:
1 0 1 1
× 1 0 1
──────
1 0 1 1
0 0 0 0
+1 0 1 1
────────
1 0 0 1 1 1
④模2除法运算定义为:
0÷1=0 1÷1=1
多位二进制模2除法也类似于普通意义上的多位二进制除法,但是在如何确定商的问题上两者采用不同的规则。后者按带借位的二进制减法,根 据余数减除数够减与否确定商1还是商0,若够减则商1,否则商0。多位模2除法采用模2减法,不带借位的二进制减法,因此考虑余数够减除数与否是没有意义 的。实际上,在CRC运算中,总能保证除数的首位为1,则模2除法运算的商是由余数首位与除数首位的模2除法运算结果确定。因为除数首位总是1,按照模2 除法运算法则,那么余数首位是1就商1,是0就商0。例如1100100÷1011=1110……110,列竖式计算:
2.2.3 溢出概念与检测方法
在定点小数机器中,数的表示范围为|x|<1. 在运算过程中如出现大于1的现象,称为“溢出”。在定点机中,正常情况下溢出是不允许的。
[例12] x=+0.1011, y=+0.1001,求x+y。
[解:]
[x]补=0.1011 [y]补=0.1001
[x]补 0.1011
+[y]补 0.1001
[x+y]补 1.0100
两个正数相加的结果成为负数,这显然是错误的。
[例13] x=-0.1101, y=-0.1011,求x+y。
[解:]
[x]补=1.0011 [y]补=1.0101
[x]补 1.0011
+[y]补 1.0101
[x+y]补 0.1000
两个负数相加的结果成为正数,这同样是错误的。
之所以发生错误,是因为运算结果产生了溢出。两个正数相加,结果大于机器所能表示的最大正数,称为上溢。而两个负数相加,结果小于机器所能表示的最小负数,称为下溢。
为了判断“溢出”是否发生,可采用两种检测的方法。第一种方法是采用双符号位法,这称为“变形补码”或“模4补码”,从而可使模2补码所能表示的数的范围扩大一倍。变形补码定义为
(2.22)
或用同余式表示为
[x]补=4+x (mod 4)
下式也同样成立:
[x]补+[y]补=[x+y]补 (mod 4)
为了得到两数变形补码之和等于两数之和的变形补码,同样必须:
-
两个符号位都看作数码一样参加运算
-
两数进行以4位模的加法,即最高符号位上产生的进位要丢掉。
采用变形补码后,如果两个数相加后,其结果的符号位出现“01”或“10”两种组合时,表示发生溢出。这是因为两个绝对值小于1的数相加,其结果不会大于或等于2,所以最高符号位永远表示结果的正确符号。
[例14] x=+0.1100, y=+0.1000,求x+y。
[解:]
[x]补=00.1100, [y]补=00.1000
[x]补 00.1100
+[y]补 00.1000
01.0100
两个符号位出现“01”,表示已溢出,即结果大于+1。
[例15] x=-0.1100, y=-0.1000,求x+y。
[解:]
[x]补=11.0100, [y]补=11.1000
[x]补 11.0100
+[y]补 11.1000
10.1100
两个符号位出现“10”,表示已溢出,即结果小于-1。
由此可以得出如下结论:
-
当以模4补码运算,运算结果的二符号位相异时,表示溢出;相同时,表示未溢出。故溢出逻辑表达式为V=Sf1⊕Sf2,其中Sf1和Sf2分别为最高符号位和第二符号位。此逻辑表达式可用异或门实现。
-
模4补码相加的结果,不论溢出与否,最高符号位始终指示正确的符号。
第二种溢出检测方法是采用单符号位法。从例1和例2中看到,当最高有效位产生进位而符号位无进位时,产生上溢;当最高有效位无进位而符号位有进位时,产生下溢。故溢出逻辑表达式为V=Cf⊕Co,其中Cf为符号位产生的进位,Co为最高有效位产生的进位。此逻辑表达式也可用异或门实现。
在定点机中当运算结果发生溢出时,机器通过逻辑电路自动检查出溢出,并进行中断处理。