文章目录

  • CRC循环冗余检验:余数为0就没出错;不能确定哪几个比特出错了
  • 二进制除法(和十进制除法其实一样!)
  • 模2除法(不同于二进制除法!本质就是异或而已)

复习网络,不小心碰到差错控制的CRC冗余码计算,随便算了一下,发现自己算的不对,于是发现了一串知识,总结如下。主要就是CRC中用到的模2运算和二进制/十进制除法有别,前者是特殊的除法,甚至根本不是除法,就是异或。

CRC循环冗余检验:余数为0就没出错;不能确定哪几个比特出错了


看来必然是要增加开销的,没有白吃的午餐,难怪名字叫做“冗余”呢



就是发送方先把冗余码的位置放n个0,然后把整个数据(k+n)位作为一个数字,除以(用的是模2除法,很重要!!不是常规除法)一个事先准备好的除数p(n+1位),除下来的余数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,所以没出错,接收。

模2除法(CRC冗余码计算)和二进制/十进制除法相关推荐

  1. 【计算机网络】冗余码计算

    冗余码计算解题思路: 1.冗余码为二进制除法的余数 2.二进制除法的运算特点是不借位除法,其中每位的商取1还是取0,取决于最高位是1还是0 3.冗余码的一定是除数位减一 4.做运算的时候要在被除数的尾 ...

  2. 二进制除法移位相减_二进制除法计算器

    二进制除法怎么算(共2篇)二进制的运算法则1 2 微型计算机运算基础1 2 1 二进制数的运算方法电子计算机具有强大的运算能力,它可以进行两种运算:算术运算和逻辑运算.1.二进制数的算术运算二进制数的 ...

  3. 二进制除法移位相减_在汇编除法中:移位相减是怎么样的原理啊,程序看了几天了还是看不懂,哪位兄弟告诉我,本人感激涕零...

    满意答案 jinqun138 2013.05.24 采纳率:42%    等级:12 已帮助:6963人 二进制的除法本质是通过重复减法运算实现 即通过重复"从被除数的高位依次取出每一位, ...

  4. python计算小数点后有几位_数学提高小数除法竖式计算过程

    除数是小数时:先把除数变成整数,除数扩大到原来的多少倍,被除数也要扩大到原来的多少倍(即小数点也向右移动几位,位数不够的用0补),然后按照除数是整数的除法进行计算.计算小数除法,除到被除数的末尾仍有余 ...

  5. python 实现 CRC 冗余码的方法

    python 实现 CRC 冗余码的方法 我这里考虑输入是 torch.Tensor的一个 只包含0 ,1 元素的张量 对于输入是numpy或者0,1字符串的方法就更简单了,总之都先要将输入处理成为 ...

  6. 小数除以整数在c语言,小数除法竖式计算的错因分析

    一. 问题的提出 新教材使用后第二次教学小数除法,同事们有的按新教材的教学顺序教.有的仍然按老教材的教学顺序教,感觉老教材更符合学生的认知规律,易于学生接受.我想研究一下到底哪一种教学顺序更适合学生. ...

  7. LabVIEW实现MODBUS协议CRC的计算

    MODBUS协议是广泛用于工业控制的通讯协议,通讯协议的报文如: 01 06 07D0 01F4 8950,可以分为以下部分: 项目 Value 从机地址 01 功能号 06 数据地址 07D0 数据 ...

  8. 定点数的除法C语言,FPGA定点小数计算(二)——除法运算

    0 引言 在四则运算中,除法最为复杂,在时间上和空间上的开销都比较大.因此很多算法都极力避免进行除法运算,或者采用其他的方案来代替除法运算.但是,除法运算作为基本的四则运算之一,在很多情况下依旧是不可 ...

  9. java不使用除号实现除法运算_LeetCode29 Medium 不用除号实现除法

    链接 难度 Medium 描述 给定两个整数,被除数和除数,要求在不使用除号的情况下计算出两数的商 Given two integers dividend and divisor, divide tw ...

  10. 同步电路出现异步清零可以吗_异步计数器 || 计数器的分类 ||异步二进制十进制|| 74290 8421 5421 || 数电...

    异步计数器 || 计数器的分类 || 异步 二进制 十进制 || 74290 || 数电 这一节介绍异步二进制计数器. 计数器功能: 计数器是对输入脉冲个数进行计数的时序电路. 计数器除了直接用于计数 ...

最新文章

  1. 动感灯箱制作流程培训_向客户推荐灯箱,这16种灯箱你一定要知道
  2. python代码格式-Python代码格式PEP8
  3. Python 根据地址获取经纬度及求距离
  4. Python函数的递归调用
  5. ubuntu下hbase的伪分布式安装与配置
  6. Confluence 6 使用 JConsole 监控本地 Confluence
  7. linux删除jpeg动态库,linux如何不用的删除动态库
  8. [转载] python中pow可以计算负数吗_Python数学.pow()计算失误
  9. 收集:Hibernate中常见问题 No row with the given identifier exists问题的原因及解决
  10. java算法按指定数量读取集合或数组中的值
  11. python获取浏览器cookie_python3实现读取chrome浏览器cookie
  12. 三年级计算机 键盘指法 教案,三年级下册信息技术教案-第06课键盘指法练习浙江摄影版(新)...
  13. 基于TensorFlow Encrypted (TFE)的隐私计算benchmark
  14. mysql菜鸟教程 文档_mysql菜鸟教程
  15. 强化学习基础05——gym
  16. wechat-0010,微信公众号,接入微信公众平台
  17. socket本地通信
  18. Windows10家庭版 提升管理员权限
  19. Mysql中删除语句delete、truncate、drop的区别
  20. 公司内网安装dns,然后把域名ning.com直接指向ingress-nginx的ip

热门文章

  1. coverity(Coverity 价格)
  2. C语言二维数组指针(指向二维数组的指针)详解
  3. 安卓手机使用远程软件TeamViewer
  4. 出入库管理软件如何修改格式
  5. mysql +cobar_转:阿里开源Mysql分布式中间件:Cobar
  6. 基于互联网位置数据的通勤特征挖掘技术
  7. 21天通关python 磁力_利用python爬取天天看美剧磁力链接
  8. C语言的printf输出格式控制
  9. Ant Design 框架
  10. python体重转换_Python第十二课 计算体脂率2.0