模 2 运算模 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,列竖式计算:0101 +0011 ──────0110 ②模 2 减法运算定义为:0-0=0 0-1=1 1-0=1 1-1=0 例如 0110-0011=0101,列竖式计算:0110 -0011 ──────0101 ③模 2 乘法运算定义为:0×0=0 0×1=0 1×0=0 1×1=1 多位二进制模2 乘法类似于普通意义上的多位二进制乘法,不同之处在于后者累加中间结果(或称部分积)时采用带进位的加法,而模2 乘法对中间结果的处理方式采用的是模 2 加法。例如 1011×101=100111,列竖式计算:1011 ×101 ──────1011 +0000 +1011 ──────── 100111 ④模 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 列竖式计算:1110 ────────1011)1100100 1011 ────── 1111 -1011 ──────1000 -1011 ──────0110 -0000 ────── 11