首页 > 编程知识 正文

二进制模2运算除法,二进制的模2除法

时间:2023-05-05 10:23:20 阅读:157741 作者:1951

文章目录CRC循环冗馀校验:余数为0则无错误; 无法确定哪个比特弄错了二进制的除法()和十进制的除法实际上是一样的! (模2除法)与二进制除法不同! 本质不过是异或)

复习网络时,不小心遇到了错误控制的CRC冗余码计算,随便计算了一下,才发现自己的计算错了。 我在那里找到了一系列的知识。 总结如下。 主要在CRC中使用的模2运算和二进制/十进制的除法上有差异。 前者是特殊的除法,甚至不是除法。 是异或。

CRC循环冗馀校验:如果余数为0,则无错误; 不能确定哪个比特是错误的

似乎必然要增加支出,没有浪费的午饭。 难怪名字叫“冗长”

发送方首先将冗长符号的位置设置为n个0,将整个数据(k n )比特作为一个数字进行除法运算,使用的是()型2除法运算,很重要! 不是普通的除法)是事先准备好的除数p(n1位),除法后的馀数r是n位的,该n位的馀数为发送端的CRC循环冗馀码。

到达接收方后,将接收到的数字除以相同的除数p (可能是协议规定的p ),馀数为0表示没有错误

必须逐帧检查

并不是100%都能正确检测到。 也有概率检测出的结果错误的情况。 冗馀代码的位数越大,结果越准确,检测错误的概率越低

二进制除法(和十进制除法实际上是一样的! ) )

类型2除法(与二进制除法不同! 本质只是异或)这个博客让我清醒了

我不知道CRC冗馀码的计算过程,花了一个多小时研究。 我以为上面的说明是指十进制除法,但是自己的例子和ppt的例子都无法推脱。 看了很多页面,我以为是二进制除法,但是二进制除法的本质和十进制除法一样,得到的结果也一样。 我想知道我想知道

我终于发现CRC计算中所说的除法不是十进制和二进制的除法,而是类型2除法。 这是一种特殊的除法,基本上只用于计算CRC冗馀码,其他地方不用。

型2除法的要点是(掌握了这些点,就可以通过型2除法的经脉,不再感到疑惑) :

不考虑进位与逐位异或相同。 名字是除法,但实际上和普通的除法完全不是一回事。 本质只是异或。 例如,商品的判定不是根据馀数和除数的大小来判定,而是根据馀数的前一位是0还是1来判定,如果馀数的前一位是0,则为商品1,如果馀数的前一位是1,则为商品0。 为什么盈馀的首位是1,商品是0呢?

其实商是余数首位和除数首位的异或,但是除数一直不变,那个顶一定是1,所以当然剩余的顶是1,商是0啊

商品的第一位由被除数决定。 如果被除数的第一位是1,则商的最高位是1,否则是0。 在计算过程中,如果余数的开头不是0,就不能向右移动。 也就是说,不能从被除数中再取一位,该位的商也变为0。 剩下的第一名不是0的话,就不能再拿第一名了。 而且,这个第一名的商品是1。 因此,根据能否向右移动来判断商品是0还是1,如果能向右移动,也可以说是商品1。 可以看出异或运算在IT领域有多么重要

可以看出以下内容。

2除法的各位的计算是完全独立的。 是异或。 完全不会进位位数。 如果剩下的首位是1的话,商品就是0。 然后,如果再次取除数和异或,则第二次剩下的首位一定为0。 但是,这次只靠右移位是得不到商品的。 因此,在上例中进行了8次异或运算,但只有6位商。 因为其中两次的余数是1。 类型2运算中使用除数和过多的异或。 二进制和十进制的除法中除数和减法使用得太多了。 接收方在收到数据后:

因为馀数是0,所以没有错误。 接收。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。