模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

时间: 2024-07-28 17:47:05

模2运算的相关文章

模2运算的原理 模2加法,模2减法,模2乘法,模2除法

模2运算是一种二进制算法,CRC校验技术中的核心部分,因此,我们在分析CRC算法之前,必须掌握模2运算的规则.与四则运算相同,模2运算也包括模2加.模2减.模2乘.模2除四种二进制运算.而且,模2运算也使用与四则运算相同的运算符,即"+"表示模2加,"-"表示模2减,"×"或"·"表示模2乘,"÷"或"/"表示模2除.与四则运算不同的是模2运算不考虑进位和借位,即模2加法是不带进位的二进

小明哥教你使用c++实现大数据之加减乘除以及模除运算

在c++中常用的数据类型有 char:1 bit,short 2 bit,int 4 bit,long long 8 bit等等,以上数据类型标识的数据大小非常有限,如果遇到大于他们能表示的范围时,计算结果就会有误,日常生活中的计算器也是如此,我国计算两个比较大的数的运算,也会出现错误,或者不能正常显示, 例如计算123456789123456789*987654321987654321 计算结果如下: 为了解决上述问题,我写了一个计算大数据四则运算以及求模的小项目,实现的功能有 + - * /

模2运算的原理(转)

模2运算是一种二进制算法,CRC校验技术中的核心部分,因此,我们在分析CRC算法之前,必须掌握模2运算的规则.与四则运算相同,模2运算也包括模2加.模2减.模2乘.模2除四种二进制运算.而且,模2运算也使用与四则运算相同的运算符,即“+”表示模2加,“-”表示模2减,“×”或“·”表示模2乘,“÷”或“/”表示模2除.与四则运算不同的是模2运算不考虑进位和借位,即模2加法是不带进位的二进制加法运算,模2减法是不带借位的二进制减法运算.这样,两个二进制位相运算时,这两个位的值就能确定运算结果,不受

模n运算

注意:只是个人理解,可能有不正确的地方 对于整数a.n,模n运算就是求a除以n的余数 如果a=10,n=3,那么a除以n的商为3,余数为1 C语言等编程语言中常使用%代表求模运算:a%n 10%3=1 英文中也使用mod代表求模运算:a mod n 10 mod 3 = 1 模n运算的加法: (a+b)%n = (a%n + b%n)%n 模n运算的减法: (a-b)%n = (a%n - b%n)%n 模n运算的乘法: (a*b)%n = (a*(b%n))%n = ((a%n)*b)%n =

模指数运算

离散数学p216

模幂运算

https://en.wikipedia.org/wiki/Modular_exponentiation 该算法在一些数论题中十分有用.算法用于快速求解同余方程 $ c = a^b \ mod \ M $ ,其中 a, b, M 已知. code: #include <iostream> #define ll long long ll modexpo(ll base, ll expo, ll mod) { if (mod == 1) return 0; ll res = 1; while (e

第五章:向量运算

第1节:零向量 1.零向量的概念 对于任意向量x,都有x+y=x,则x被称为零向量.例如,3D零向量为[0 0 0].零向量非常特殊,因为它是唯一大小为零的向量,并且唯一一个没有方向的向量. 第2节:负向量 1.负向量的概念 对于向量x,如果x+(-x)=0,则-x就是负向量. 2.负向量的运算法则 将此法则应用到2D,3D,4D中,则 -[x y] = [-x -y] -[x y z] = [-x -y -z] -[w x y z] = [-w -x -y -z] 3.负向量的几何解释 向量为

快速模取幂

数论计算中经常出现的一种运算就是求一个数的幂ab对另外一个数n个模的运算,即计算: ab mod n (a,b,n是正整数) 由于计算机只能表示有限位的整数,所以编程时模取幂的运算要注意值的大小范围,当ab的值超过整数范围时,mod运算便无法进行. 如何解决这个问题,我们引出一个能计算ab mod n的值的有用算法--反复平方法,首先我们必须明确: d=ab mod n=(-((((a mod n)*a)mod n)*a)mod n-*a)mod n    {共b个a} 由此可以引出一个迭代式

Java语法基础--运算

常量是一些不变的数据,我们用变量的方式把常量给记录下来,变量是内存中一个空间,空间中可以存储某些类型的数据,变量还有一个好处,就是可以给一些常量取名称,方便阅读: 取模运算 就是取余数.模2运算,非0即1,用于切换. -3%6结果是-3 . 3%-6结果是3 . 负数运算参考左边符号. 对于除号"/",它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分. 例如:int x=3510;x=x/1000*1000;  x的结果是3. 自增运算 ++ int a=3