2.1 进位计数制与数制转换
任何$R$进制数$N$均可表示为
$R$:$R$进制的基数,表示数列中各位数字$x_i(-m\leq i\leq n-1)$的取值范围是$0\sim R-1$,并且计数规则是“逢$R$进一”。
$R^i$:位权值,$x_i R^i$表示$x_i$在数列中所代表的实际数值。
任何进位计数制都具有两个基本因素:基值和位权值。
计算机中常用进位计数制有二进制、八进制、十进制、十六进制。
任意进制数转换为十进制数,只需按权相加。
十进制数转换为任意进制数,整数部分除基取余,小数部分乘基取整。
计算机中的数据表示是能够由计算机硬件直接识别的数据类型,如定点数、浮点数、长度、存放格式等。硬件直接识别指某种数据类型可用计算机硬件直接表示出来,并能用计算机指令直接调用。
数据表示需要注意取值范围、精度、类型。
2.2 带符号数的表示
2.2.1 机器数与真值
由于计算机中的硬件电路只能直接表示和处理二进制数,所以需要研究带符号数的符号和小数点在计算机中如何表示。
采用二进制表示形式的连同数符一起代码化了的数据,在计算机中统称为机器数或机器码。机器数是数在计算机中的二进制表示形式。
与机器数对应的用正、负号加绝对值表示的实际数值(实数)称为真值。
数的符号的二进制代码化中,“0”代表+,“1”代表-,且放在数据的最高位,小数点本身是隐含的,不占用存储空间。每个机器数数据所占的二进制位数受机器硬件规模的限制,与机器字长(word size)有关,超过机器字长的数值要舍去。
字长是运算器执行一次数据运算可以同时处理的二进制位的位数(通常为字节的整数倍),定义该机器的内部data size的基准。
机器数表示的“实数”数值是不连续的。8位二进制无符号数可以表示0~255,8位二进制带符号数可以表示-127~127,其中10000000表示-0,00000000表示+0。
计算机在执行指令时,指令所处理的数据类型由指令操作码决定。
2.2.2 原码表示
1.原码的定义
原码表示指保持原有的数值部分的形式不变,只将符号用二进制代码表示。
纯小数原码的定义:
纯整数原码的定义:
式中$n$为字长,数值部分只能占用$n-1$位二进制位。
2.原码中“0”的表示
原码中“0”有两种表示(即+0和-0)
纯小数原码
$[+0]_原=0.00\dots0$
$[-0]_原=1.00\dots0$
纯整数原码
$[+0]_原=00\dots0$
$[-0]_原=10\dots0$
原码表示导致加减运算复杂。
3.原码的表数范围
对于纯小数,n位原码的表示范围:
$-0.111\dots11(n位)\sim+0.111\dots11(n位)$,即$-(1-2^{-(n-1)})\sim(1-2^{-(n-1)})$,纯小数n位原码中有一位是符号,n-1位数值位。
对于纯整数,n位原码的表示范围:
$-0111\dots11(n位)\sim+0111\dots11(n位)$,即$-(2^{n-1}-1)\sim(2^{n-1}-1)$,纯整数n位原码中有一位是符号,n-1位数值位。
因为原码中“0”有两种表示方式,所以n位的原码共可表示$2^n-1$个数。
4.原码的移位规则
原码移位时,符号位不变,数值部分左移或右移,移出的空位填“0”。左移时不要将有效位移出,否则将会溢出(overflow)。
5.原码的特点
(1)原码表示直观易懂,与真值的转换容易。
(2)原码表示中0有两种表示形式,带来不便。
(3)通常0的原码用+0表示,若计算中出现了-0,需要用硬件将-0变为+0。
(4)原码表示的加减法运算复杂,进行相加运算时,首先判别符号,同号做加法,异号做减法;进行相减运算时,不仅要判别符号,还要判别绝对值大小,用绝对值大的减小的,取绝对值大的数符号为结果符号。
2.2.3 补码表示
引入补码的目的是为了解决原码表示在加减运算时的不便。
1.模的概念
代数学同余概念
若整数$Z、Y、K$满足关系:$Z=nK+Y$($n$为整数),则称整数$Z$与整数$Y$对模$K$是同余的,记为$Z\equiv Y(mod K)$。
假设计算机字长为$n$,则存在模$K=2^n$。
假设存在模$M$,则有$[x]补=M+x(modM)$,当$x\geq0$时,$M+x$大于$M$,把$M$丢掉,所以$[x]补=x$,即正数的补数等于其本身;当$x<0$时,$[x]_补=M+x=M-|x|$,所以负数的补数等于模与该数绝对值之差。
2.补码的定义
在计算机中把补数称为补码,对于纯小数表示,通常取模$M=2$,对于纯整数表示,通常取模$M=2^n$($n$为字长)。
纯小数的补码定义
纯整数的补码定义
3.特殊数的补码表示
补码中“0”的表示是唯一的
$[+0]补=[-0]补=0.00\dots0$(纯小数)
$[+0]补=[-0]补=00\dots0$(纯整数)
补码表示的最小数可以表示到-1或$-2^{n-1}$
对于纯小数,$[-1]_补=2+(-1)=1.00\dots0(mod2)$
对于纯整数,$[-2^{n-1}]_补=2^n+(-2^{n-1})=100\dots0(mod2)$
对于补码而言,符号位处的数值,既有符号含义,也有数值含义。
对于n位补码,其表数范围为:
纯小数$-1\sim1-2^{-(n-1)}$共$2^n$个数
纯整数$-2^{n-1}\sim2^{n-1}-1$共$2^n$个数
4.补码的简便求法
若$x\geq0$,则$[x]补=x$,符号位为0;若$x\leq0$,则将$x$的绝对值各位取反,然后再最低位加上1,符号位等于1,即得到$[x]补$,或者用字长的宽度写出$x$的绝对值,然后逐位取反,末尾加1。
5.补码的几何性质

正数的补码就是其本身,负数的补码表示的实质是把负数映像到正值区域,因此加上一个负数或减去一个正数可以用加上另一个数(补码)来代替。从表示符号的角度看,符号位的值代表了数的正确符号,0表示整数,1表示负数。从映像值来看,符号位的值是映像值的一个数位,因此在补码运算中,符号位与数值位一样参加运算。补码的几何性质说明了补码运算的基础,原码运算时符号位不能参加运算。
6.补码的几个关系
(1)补码与原码的关系
若$x\geq0$,则$[x]补=[x]原$;若$x<0$,则将除符号位以外的$[x]原$各位取反(符号位不变),然后在最低位上加1,即得到$[x]补$。反之,将除符号位以外的$[x]补$的各位取反(符号位不变),然后在最低位上加1,即得到$[x]原$。补码中特殊数-1(纯小数)和$-2^n$(纯整数)的表示,在原码中没有对应表示。
(2)补码与机器负数的关系
在补码运算中称$[x]补$为机器正数,$[-x]补$为机器负数;将$[x]补$的各位(含符号位)取反,然后在最低位上加1,即可得到$[-x]补$,反之亦然,或$[-x]补=0-[x]补$,反之亦然。求$[-x]补$,也称为对$[x]补$的求补。
(3)补码的移位规则
补码的右移规则:符号位不变,数值位各位向右移位,高位移空位置补与符号位相同的代码。
补码的左移规则:连同符号位同时左移,低位移空位置补0,如果移位后符号位与移位前符号位不一致,说明溢出。
7.补码的模
补码总是对确定的模而言,如果运算结果超过了模,则模将自动丢失,有可能产生溢出。
补码运算过程中,模不能丢失。
因为整数补码的模不同,所以不能将不同位数的补码直接进行运算。如需进行运算,需要进行符号扩展(即使用较大的模)。
2.2.4 反码表示
反码实质上是一种特殊的补码,其特殊之处在于反码的模比补码的模小一个最低位上的1。
1.反码的定义
纯小数反码的定义
纯整数反码的定义
2.反码的求法
若$x\geq0$,则$[x]_反=x$,符号位为0
若$x<0$,则将$x$的各位取反,符号位等于1,即得到$[x]_反$。
3.反码中“0”的表示
纯小数反码:$[+0]反=0.00\dots0$;$[-0]反=1.11\dots1$
纯整数反码:$[+0]反=00\dots0$;$[-0]反=11\dots1$
4.反码的表数范围
与原码相同,纯小数反码中不能表示“-1”,纯整数反码中不能表示“$-2^{n-1}$”
5.反码与原码的关系
若$x\geq0$,则$[x]反=[x]原$;若$x<0$,则将除符号位以外的$[x]原$各位取反,得到$[x]反$,反之亦然。
2.2.5 移码表示
移码也称为增码、余码,主要用于表示浮点数的阶码。
1.移码的定义
纯小数移码的定义$[x]移=1+x -1\leq x<1$;纯整数移码的定义$[x]移=2^{n-1}+x -2^{n-1}\leq x<2^{n-1}$($n$为表示移码的二进制位的位数,$2^{n-1}$称为“偏值”(bias))
移码的几何性质:移码表示的实质是把真值映像到一个正数域,因此移码的大小可直观地反映真值的大小。不管正数还是负数,用移码表示时,都可以按无符号数比较大小。

移码中“0”的表示是唯一的,$[+0]_移=10\dots0$(纯整数),移码的表数范围与补码一致,纯整数移码表示的最小数可以表示到$-2^{n-1}$。
2.移码与补码的关系
整数补码的数值部分不变,符号取反,即得整数移码,反之亦然,即:
$x\geq0$时,$[x]移=[x]补+2^{n-1}$;$x<0$时,$[x]移=[x]补-2^{n-1}$
3.移码的特点
(1)设$[x]移=x_0x_1x_2\dots x{n-1}$,符号位$x_0$表示真值$x$的正负:$x_0=1,x$为正;$x_0=0,x$为负。
(2)真值0的移码表示只有一种形式。
(3)移码与补码的表示范围相同,纯小数的移码可以表示到“-1”,$[-1]移=0.0\dots0$;纯整数的移码可以表示到“$-2^{n-1}$”,$[-2^{n-1}]移=00\dots0$,$n$为字长。
(4)真值大时,对应的移码也大;真值小时,对应的移码也小。当$[x]_移=0$时,$x$为编码所能够表示的最小值。
移码的符号位无数值含义,但可以直接参与到“减法(比较数值大小)”运算中,可以通过是否产生退(借)位,直接获得两个移码数之间的大小信息。
4.移数值(偏值(bias))为$K$的移码
根据移码的几何性质,可以将移码的定义进行扩展,得到特殊的移码为:移码=$K+$实际数值。$K$是约定的移数值(偏值(bias))。

2.3 数的定点表示与浮点表示
任何一个数均可表示为:$(N)_R=\pm S\times R^{\pm e}$,$R$为基值,计算机中常用的$R$可取2、8、16等;$S$为尾数,代表数$N$的有效数字,计算机中一般表示为纯小数;$e$为阶码,代表数$N$的小数点的实际位置,一般表示为纯整数。
2.3.1 定点表示
定点表示:约定计算机中所有数据的小数点位置均是相同的而且是固定不变的,是一种阶码$e$的取值范围固定不变的机器数表示。
当采用定点表示时,$(N)_R=\pm S\times R^{\pm e}$中$e$的取值固定不变,$e=0$,有$R^{\pm e}=1$,即$(N)_R=\pm S$,含义是只需要在计算机内描述位数$S$,不需要描述阶码$e$。
定点数有定点小数和定点整数两种表示方法。
机器(软件)确定后,$e$就确定了,不能更改,也不能两者并存,最后通过确定的$e$来调整。
1.定点小数
$e=0$,表示纯小数,约定小数点在符号位与最高数值位之间,格式为

2.定点整数
$e=n$,表示纯整数,约定小数点在最低有效数值位之后,格式为

3.定点数的分辨率
定点数在数轴上的分布是不连续的,定点数的分辨率是指相邻两个定点数之间的最小间隔。字长为$n$的定点小数的分辨率为$2^{-(n-1)}$,字长为$n$的定点整数的分辨率为1。
4.定点机的特点
硬件上只考虑定点小数或定点整数运算的计算机称为定点机,定点机的优点是运算简单,硬件结构比较简单。定点机存在的问题是:所能表示的数据范围小;使用不方便,运算精度较低;存储单元利用率低。
定点表示计算简单,硬件实现容易,但数据表示范围小,很难兼顾数值范围和精度的要求,不适合科学计算。
2.3.2 浮点表示
浮点表示:指各个数的小数点位置不是固定不变的,而是可以浮动的。即$(N)_R=\pm S\times R^{\pm e}$中$e$的值是可变的。由于$e$的值可变,因此在机器中必须将$e$表示出来。
1.浮点表示的数据格式
浮点数由阶码和尾数两部分组成。阶码表示数的小数点实际位置,尾数表示数的有效数字。尾数的基数$R$是设计者约定的,用隐含方法表示,通常取$R=2$,也可以采用4、8、16进制。阶码均采用2为基数。浮点数的表示格式中,包括1位数符、用$n$位纯小数表示的尾数部分、1位阶符和用$m$位纯整数表示的阶码部分。

浮点数有两种表示格式

在实际机器中,通常都采用后一种表示格式。阶码采用纯整数,尾数采用纯小数。
2.浮点数的规格化
数据采用浮点表示时,存在两个问题:如何尽可能多地保留有效数字(设计浮点数格式时尽可能为尾数提供较多的二进制位数),如何保证浮点数表示的唯一(小数点后第一位必须为有效数字,称规格化表示法)。
浮点数采用规格化表示方法的目的是:提高运算精度,充分利用尾数的有效数位,尽可能占满位数,以保留更多的有效数字;保证浮点数表示的唯一性。为达到上述目的,需要尽可能去掉尾数中的前置“0”,即尽量使小数点后第一位为“1”。对于二进制数,就是要满足$\frac{1}{2}\leq|S|<1$。
规格化数的定义
采用原码表示法表示尾数的规格化数:若$[S]原=S_f.S_1S_2\dots S{n-1}$,则满足$\frac{1}{2}\leq|S|<1$的数为规格化数,对于$[S]原=S_f.S_1S_2\dots S{n-1}$,其规格化标志是$S1=1$,即$[S]原=0.1xx\dots x$或$[S]_原=1.1xx\dots x$。
采用补码表示法表示尾数的规格化数:若$[S]补=S_f.S_1S_2\dots S{n-1}$,则满足$-1\leq S<-\frac{1}{2}$和$\frac{1}{2}\leq S<1$的数为规格化数。对于$[S]补=S_f.S_1S_2\dots S{n-1}$,其规格化标志是$Sf\oplus S_1=1$,即$[S]补=0.1xx\dots x$或$[S]_补=1.0xx\dots x$。补码表示的规格化数中,$-\frac{1}{2}$不是规格化数,而-1是规格化数。
3.浮点数的表示范围
要求浮点数的表示范围,实质是求出浮点数所能表示的最小负数、最大负数、最小正数和最大正数这四个典型数据。

在浮点数表示中,尾数的位数决定了数据表示的精度,增加尾数的位数可增加有效数字位数,即提高数据表示精度。阶码的位数决定了数据表示的范围,增加阶码的位数,可扩大数据表示的范围。
为了得到较高的精度和较大的数据表示范围,很多机器中都设置单精度浮点数(float)和双精度浮点数(double)等不同的浮点数格式。单精度浮点数就是用一个字长表示一个浮点数,双精度浮点数是用二个字长表示一个浮点数。
4.IEEE754浮点数标准
每个浮点数均由三部分组成:符号位$S$,指数部分$E$和尾数部分$M$。
浮点数可采用以下四种基本格式
(1)单精度格式(32位):E=8位,M=23位
(2)扩展单精度格式:E$\geq$11位,M=31位
(3)双精度格式(64位):E=11位,M=52位
(4)扩展双精度格式(32位):E$\geq$15位,M$\geq$63位
32位单精度浮点数表示格式为

正常浮点数$N$的数值为$N=(-1)^S\times1.M\times2^{E-127}$
S为数符,0表示+,1表示-;E为指数即阶码部分,其中包括1位阶符和7位数值,采用移127码,移码值为127,即阶码=127+实际数值;规定阶码的取值范围为1~254,阶码值255和0用于表示特殊数值;M共23位,由于尾数采用规格化表示,所以小数点左部有一位隐含位为1,从而使尾数的实际有效位为24位,即尾数的有效值为1.M,尾数采用原码表示。
2.4 非数值型数据的表示
非数值型数据指逻辑数、字符、字符串、文字及某些专用符号等的二进制代码,这些二进制代码并不表示数值,所以称为非数值型数据或符号数据。
2.4.1 逻辑数——二进制串
逻辑数用于代表命题的是与非等逻辑关系,用二进制串表示,特点是:没有符号问题,各位相互独立,没有位权和进位问题;不代表值的大小,仅代表逻辑关系;只能参加逻辑运算,按位进行。
2.4.2 字符与字符串
1.字符编码
英文字符编码ASCII(American Standard Code for Information Interchange,美国国家信息交换标准字符码)码,是用七位二进制表示一个字符,包括10个数字(0-9),52个英文大小写字母(A-Z,a-z),33个专用字符(,%#),33个控制字符(NUL、LF、CR、DEL)共128个字符。
ASCII字符编码的符号排列为$b_6b_5b_4b_3b_2b_1b_0$,其中$b_6b_5b_4$为高位部分,$b_3b_2b_1b_0$为低位部分。

英文字符编码EBCDIC(Extended Binary Coded Decimal Interchange Code,扩展二-十进制交换码)码,在IBM公司常用,使用8位二进制表示一个字符,兼容ASCII字符集。
2.字符串数据(string)
字符串指连续的一串字符,通常一个字符串使用内存中多个连续的(字节)存储单元进行存放。
2.4.3 汉字信息的表示
为使计算机能够处理各种汉字信息,必须对汉字进行编码。汉字在计算机中表示比较特殊,涉及输入、存储、处理输出等方面的问题,编码有很多类型。

GB2312-80、ISO/IEC2022-1994、GBK、GB18030-2005、ISO/IEC10646等。
UTF-8:1-4字节,中文3字节;UTF-EBCDIC:类似UTF-8,但不是Unicode真实标准,只为兼容性考虑;UTF-16、UCS-2:2字节、3字节;UTF-32、UCS-4:4字节。
汉字字形码用于记录汉字的外形,是汉字的输出形式,又称子模,主要用于汉字的显示和打印。汉字字形有点阵法(点阵码)和矢量法(矢量码)两种记录方法。
2.5 十进制数串的表示
为了满足某些应用领域的需要,要求某些计算机内部能直接对十进制数进行运算和处理,为此要求对十进制数字进行二进制编码,且能够便于处理。
(1)采用ASCII码对应的数字编码。(2)采用十进制数字对应的4位二进制数编码(8421BCD,2421BCD,余3)。
1.字符串形式(用于显示、打印等)
将十进制数串以字符串形式表示,即一个字节表示一个十进制数位的字符编码或符号编码。在主存中,一个十进制数串需占用多个连续的字节,为了指明一个十进制数串,需要指明该数串在主存中的起始地址和串的长度,根据数串中符号所处位置,又分为前分隔数字串和后嵌入数字串两种表示形式。
(1)前分隔数字串:符号位占用单独一个字节,放在数字位之前,即数串最前面的字节中。正号用+表示,即ASCII 2BH,负号用-表示,即ASCII 2DH。(2)后嵌入数字串:符号位不单独占用一个字节,嵌入到最低一位数字里面,若符号为正,则不变,若符号为负,则最低位加40H。
2.压缩的十进制数串
用一个字节存放两个十进制数位,其值用BCD码表示,符号位占半个字节,存放在最低位之后。1100表示+,1101表示-。数字个数和符号为之和必须为偶数,否则最高位前补0。
2.6 数据的长度与存储方式
不同类型数据的二进制长度各不相同,因此计算机存储数据时,必须按照规定的顺序组织存储。
2.6.1 数据的长度
1.位、字节、字和字长
在计算机系统中,一位二进制数据0或1称为一个位或一个比特(bit,简写b),是存储、传输和处理信息的最小单位。
计算机系统中西文字符通常采用8个二进制位表示,因此将8个bit称为一个字节(Byte,简写为B)。字节是最常用的二进制计量单位。
字是指计算机系统中可以在同一时间内被同时处理的一组二进制数,字在计算机中通常作为一个整体被存取、传输和处理。不同ISA对字宽度定义不同。
2.6.2 数据的存储方式
在计算机中存储数据时,二进制的0/1串从低位到高位可以有不同的存放顺序,需要规定数据的最高位和最低位,以便避免歧义。
最高有效位(MSB,Most Significant Bit):数据的最高位;最低有效位(LSB,Least Significant Bit):数据的最低位。
计算机在访问多字节数据时,对每个数据只会给出一个地址,然后按规定顺序访问数据的各个字节。通常将最小的地址作为该数据的地址。
大端排序方式(big endian):数据的最高有效字节MSB存放在低地址单元中,最低有效字节LSB存放在高地址单元中;小端排序方式(little endian):数据的最高有效字节MSB存放在高地址单元中,最低有效字节LSB存放在低地址单元中。
2.7 数据校验码
数据校验码:具有检测某些错误或带有自动纠正错误能力的数据编码方式。常用的数据校验码有奇偶校验码、海明校验码、循环校验码等。
实现原理:在正常编码中加入冗余位,当合法数据编码出现某些错误时,称为非法编码,因此就可以通过检测编码是否合法来达到自动发现、定位乃至改正错误的目的。在数据校验码的设计中,需要根据编码的码距合理地安排非法编码的数量和编码规则。
2.7.1 码距与数据校验码
通常把一组编码中任何两个编码之间代码不同的位数称为这两个编码的距离,也称海明距离。
码距指一组编码中任何两个编码之间最小的距离。
校验码通常是在正常编码的基础上按特定规则增加一些附加的校验位形成的编码,即通过增大编码的码距来实现检查和纠正错误的能力。合理地增加校验位、增大码距,就能提高校验码发现错误的能力。
校验位越多,码距越大,编码的检错和纠错能力越强。
记码距为$d$,码距与校验码的检错和纠错能力的关系是:
2.7.2 奇偶校验码
1.奇偶校验码的编码方法
在n位有效信息位上增加一个二进制位作为校验位P,构成n+1位的奇偶校验码。
奇校验Odd:校验位P的取值(0或1)使n+1位的奇偶校验码中1的个数为奇数。
偶校验Even:校验位P的取值(0或1)使n+1位的奇偶校验码中1的个数为偶数。
校验位的位置在有效信息位的最高位之前或者在最低位之后。
2.奇偶校验码的校验
若接到一个奇校验码中1的个数为偶数,或接到一个偶校验码中1的个数为奇数,则表示有一位出错。
3.奇偶校验码的校错能力
只能发现奇数位个错误,无法发现偶数位个错误,即使发现错误也无法确定出错位置,因而无法自动纠错。
2.7.3 海明校验码
海明校验码的实质是在奇偶校验的基础上,增加校验位的位数,构成多组奇偶校验,以便发现错误并自动纠正错误。
设有效信息位的位数为n,校验位的位数为k,构成n+k位编码。因为校验码个数为k,则有$2^k$个编码,其中一组编码用来指出没有错误,其余$2^k-1$个组编码用于指出错误发生在哪一位,但也可能是校验位本身错误,故有$n+k\leq2^k-1$。
1.有效信息位与校验位的关系

2.海明校验码的编码方法
(1)n位有效信息选择k个校验位,构成n+k位的海明校验码。若校验码位号从左向右(或从右向左)按从1到n+k排列,则校验位的位号分别为$2^i,i=0,1,2,\dots,k-1$,有效信息位按原排列次序安排在其它位号中。
(2)k个校验位构成k组奇偶校验,每个有效信息位都被2个或2个以上的校验位校验,被校验的位号等于校验它的校验位位号之和。
(3)统计参与每组奇偶校验的位号,按奇偶校验原理,由已知的有效信息按奇或偶校验求出各个校验位,进而形成海明校验码。
3.海明校验码的校验
校验时,k个校验位进行k组奇偶校验,校验结果形成k位的指误字$EKE{k-1}\dots E_2E_1$。若某组校验结果正确,指误字相应位为0;若校验结果错误,指误字相应位为1。指误字代码所对应的十进制值就是出错位的位号,将该位取反,错误码即得到自动纠正。
指误字指示出错的前提是代码中只存在一个错,若有多个错,可能查不出来。只有在只存在一个错的前提下,海明校验码才能实现检一纠一错。
4.扩展的海明校验码
为了满足检二纠一的要求,可将检一纠一海明校验码进行奇偶校验。扩展海明校验码就是在检一纠一海明校验码上增加一个奇偶校验位$P_0$
2.7.4 循环冗余校验码
循环冗余校验码(Cyclic Redundancy Check)简称为CRC码,是一种具有很强检错纠错能力的校验码,通过除法运算来建立有效信息和校验位之间的约定关系。
1.CRC码的编码思想
对于多项式$M(x)$和$G(x)$有:
如果对于一个$M(x)$,事先按某一$G(x)$求得$Q(x)$和$R(x)$,传送时,把$M(x)-R(x)$作为含校验码的编码传送,当收到该编码后,接收端仍用原约定的多项式$G(x)$去除接收到的编码,若能整除,即余数为0,则表示接收到的编码正确;若不能整除,即余数不为0,则表明有错,并可根据余数值确定出错位号(位置),进行自动纠正。
2.模2运算
模2运算是不考虑进位和借位的二进制运算,按异或规则实现。
3.CRC码的编码方法
(1)把待编的n位有效信息表示为多项式$M(x)$,$M(x)=C{n-1}x^{n-1}+C{n-2}x^{n-2}+\dots+C_1X^1+C_0$,$C_i=0$或$1$对应$M$中第$i$位的信息。选择一个$k+1$位约定多项式$G(x)$作为约定除数(又称生成多项式)。
(2)把$M(x)$左移k位,得到$M(x)\cdot X^k$,然后按模2除法,用$M(x)\cdot X^k$除以$G(x)$得到k位余数$R(x)$,即
(3)将$M(x)\cdot X^k$与余数$R(x)$作模2相加,即形成循环冗余校验码。
4.CRC码的校验
把接收到的CRC码用原约定的生成多项式$G(x)$作模2除,若除得余数为0,表示没有错误;若除得余数不为0,表示有一位出错。根据余数值可确定出错的位置。
5.循环冗余校验码的生成多项式
生成多项式应满足下列要求:
(1)任何一位发生错误都应使余数不为0;
(2)不同位发生错误应当使余数不同;
(3)对余数作模2除法,应能使余数循环。
选择不同的生成多项式,CRC码的码距不同,因而检错、校错能力也不同,出错模式也不同。
常用的生成多项式
