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

2023-05-16

文章目录

  • 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,所以没出错,接收。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Yolov3+C+++opencv+VS2015成功检测

    nbsp 前言 nbsp nbsp nbsp 最近在用yolov3进行目标检测 也有一个多星期了 想把最近做出的一些成果记录下来 供大家参考下 我的运行环境是C opencv VS2015 yolov3 下面将简单介绍下yolo的一些思想
  • simulink之S函数

    s函数是system Function的简称 xff0c 用它来写自己的simulink模块 xff08 够简单吧 xff0c xff0c 详细的概念介绍大伙看帮助吧 xff09 可以用matlab C C 43 43 Fortran Ad
  • win10解决未安装任何音频输出设备

    最近刚刚更新了一下win10系统 xff0c 开始啥问题没有 xff0c 晚上睡觉关机后 xff0c 第二天开机 xff0c 小喇叭处有一个红叉 xff0c 显示未安装任何音频输出设备 查看了微软的官网以及百度了很多解决方法 xff0c 电
  • Quadcopter控制

    1 问题描述 四旋翼飞行器对角线上的两个电机旋转方向相同 xff0c 另一对与之旋转方向相反 这是使推力 xff0c 滚转 xff0c 俯仰 xff0c 偏航相互独立控制的必要条件 这可以使我们命令其中的一个动作而不影响其他动作 实际上 x
  • 入门级都能看懂的softmax详解

    项目github地址 xff1a bitcarmanlee easy algorithm interview and practice 经常有同学私信或留言询问相关问题 xff0c V号bitcarmanlee github上star的同学
  • LQR制导

    LQR制导 引言 在ardupilot中固定翼飞机横航向位置控制 xff08 制导律 xff09 采用L1制导律 xff0c 最近想将一些其他的控制理论用于ardupilot代码中 xff0c 通过ardupilot论坛 xff0c 看到已
  • 2022年度总结

    年度总结 参加工作的第一年很快就过去了 xff0c 从四月份离校到公司 xff0c 直到农历腊月27回家 xff0c 工作了9个月的时间 xff0c 总的来说工作和学习的差别还是很大的 xff0c 从学生到社畜的转换还是花了一段时间的 接下
  • HTTP基本认证

    在HTTP中 xff0c 基本认证 xff08 英语 xff1a Basic access authentication xff09 是允许http用户代理 xff08 如 xff1a 网页浏览器 xff09 在请求时 xff0c 提供 用
  • c# 设置代理服务器发送http请求

    span class token keyword using span span class token namespace System span span class token punctuation span span class
  • Blaze:高性能C++数学库

    Blaze xff1a 高性能C 43 43 数学库 本文译自 xff1a Blaze A high performance C 43 43 math library Blaze是一个用于密集和稀疏算法的开源 高性能 C 43 43 数学库
  • c/c++编译:使用CMAKE进行跨平台开发

    前言 本文介绍跨平台cmake的编写 xff0c 主要是linux和windows用cmake对项目的编译 这是一个通用模板 xff0c 能够应用到更加复杂的项目中 xff0c 项目例子用https blog csdn net qq 364
  • 对于应用层HTTP协议的学习

    lt start gt 在TCP IP协议栈中 xff0c HTTP协议处于应用层 xff0c 它在最顶层进行数据报转发给应用进程 xff0c 它是最靠近用户的那一层 它的默认端口号为80 HTTP协议是基于请求响应的协议 xff0c 那么
  • 编程开发环境搭建

    全部目录 下载 amp 安装官方下载Vs2019其它历史 版本下载 开始使用安装C 43 43 的工作负载 xff08 环境 xff09 打开vs后有这些模板创建出一个控制台应用程序更多参考文档 使用手册c 43 43 参考手册Visual
  • c++创建第一个控制台程序

    目录 创建控制台应用程序打印出Hello World 空项目创建vs自带打印的创建桌面向导 自定义创建 了解代码 抛转引玉减少为什么 什么是 include 它是预处理指令什么是iostream 它是c 43 43 标准库头件 编写前的了解
  • python3-操作SQLite、创建表、添加数据、查询数据

    SQLlte数据类型 SQLite能保存什么样的数据类型 可以保存空值 整数 浮点数 字符串和blob 什么是blob xff1f xff1f 是二进制大对象 例如图片 音乐 zip文件 什么是游标 游标是在数据库中用来移动和执行查询的对象
  • 初学者都能看懂的95%置信区间

    项目github地址 xff1a bitcarmanlee easy algorithm interview and practice 经常有同学私信或留言询问相关问题 xff0c V号bitcarmanlee github上star的同学
  • c# WindowForm练习项目主窗体设计

    窗体分割器 SpliContainer分割器 在项目主窗体分割成左右俩部分 设置边框线属性 MonthCalendar月历控件 添加程序所需要的按钮 退出 修改密码 添加会员 按钮 固定好左边的容器 组件 ImageList 按钮太多添加图
  • C#-WinForm班级下拉框数据绑定

    前台展示 后台方法 span class hljs keyword using span System span class hljs keyword using span System Collections Generic span c
  • C#--WinForm项目主窗体设计

    主窗体基本设置 大小 颜色 去边框 出现的位置 Panel控件 背景图 颜色 布局 xff1a Label标签 文本 字体 背景颜色 布局 按钮 布局 文本 字体颜色 背景色 底部panel 绑定控件边框 颜色 用label标签导入图标 S
  • C# -- 实现WinForm程序的密码修改

    修改窗体程序密码的示例 实现分析 前台弹出修改窗体 编写后台方法 xff0c 调用通用数据访问类Update方法 数据验证 xff0c 判断原密码是否与旧密码符合 xff0c 俩次输入的新密码是否一致 更新程序全局变量 前台弹出修改窗体 编

随机推荐

  • C#--WinForm--表格数据控件DataGridView--绑定模式

    官方文档 DataGridView控件提供了一种强大而灵活的以表格形式显示数据的方式 用户可以使用DataGridView控件来显示少量数据的只读视图 xff0c 也可以对其进行缩放以显示特大数据集的可编辑视图 扩展DataGridView
  • ASP.NET--网站配置、发布与部署

    网站发布前的配置信息 配置文件下载 网站发布的基本步骤 写好的项目 在本机上发布 打开目录查看 xff1a 部署网站 安装IIs 打开控制面板 程序和功能 启用或关闭Windows功能 安装后 返回控制面板 管理工具 双击打开 xff1a
  • c/c++ hash表 (哈希表、字典表)

    表 1 表 存储数据 key gt value 2 表存储数据结构的困难 怎么查找 一个一个key去比较去查找 xff1f 61 61 效率不高 3 Hash算法加快查找 将字符串的key 转成整数 使用整数找到对应的value Hash算
  • c/c++ UDP通讯

    UDP通讯 1 无连接的 不需要反复的确认和握手等待 根本不关心对方是否存在 2 不可靠 可能有丢包 和先发后到 3 UDP通讯快速 占用系统资源少 4 UDP提供作为传输层协议的最基本功能 将其他的交给用户自己来管理 UDP服务端 1 创
  • c#程序流程控制与调试技术

    If选择结构 为什么要使用关系运算符 简单If 选择结构1 逻辑运算符
  • 特征融合之基于贝叶斯理论的特征融合算法

    参考文献 xff1a 1 刘渭滨 邹智元 邢薇薇 模式分类中的特征融合方法 J 北京邮电大学学报 2017 04 5 12 2 Ma A J Yuen P C Lai J H Linear Dependency Modeling for C
  • 初学者都能看懂的蒙特卡洛方法以及python实现

    项目github地址 xff1a bitcarmanlee easy algorithm interview and practice 经常有同学私信或留言询问相关问题 xff0c V号bitcarmanlee github上star的同学
  • postman安装包

    postman34位和64位安装包 xff0c 访问API 下载地址 xff1a 链接 xff1a https pan baidu com s 1p 830DPPKumXiwMPVtKYsw 提取码 xff1a 8p6k
  • STM32入门:STM32F401CDU6库函数工程文件搭建

    STM32F401CDU6库函数工程文件搭建 根据下图的结构进行复制粘贴操作 xff0c 代码部分在本文末有贴出来 xff0c STM32F4xx DSP StdPeriph Lib V1 8 0文件下载 xff08 使用part1即可 x
  • 减小vscode-cpptools的内存占用

    在VScode菜单栏文件 gt 首选项 gt 设置 搜索C Cpp intelliSenseCacheSize 修改默认的5120为512
  • Ubuntu20.04 安装tcp调试工具mNetAssist步骤

    概述 在Ubuntu20 04上安装一个比较好用的网络调试助手mNetAssist 下载链接 mNetAssist链接 提取码 vrsm 安装 进入文件 mNetAssist release amd64 deb的所在文件夹 xff0c 然后
  • 页面加载时,添加进度条,提高用户体验

    这几个月做了个项目 xff0c 在此对一些问题做一个记录 项目是前后端分离的 xff0c 前端用的 npm 43 webpack 问题 xff1a 由于系统某页面数据量过大或网络较差等原因 xff0c 导致页面还未完全加载出来 xff0c
  • matlab绘制三维图像,用ga工具箱求解有约束的优化问题(接力遗传算法)

    绘制目标函数图像 目标函数的图像绘制为 xff08 未考虑约束条件 xff09 画法1代码 有约束的三维函数图像绘制 x1 61 10 1 10 x2 61 6 1 6 x1 x2 61 meshgrid x1 x2 f 61 exp x1
  • 多元线性回归 stata

    文章目录 回归的思想 xff0c 任务 xff0c 使命 xff0c 分类线性回归一定只能用于有线性关系的变量吗数据的分类数据的标准化处理最小二乘法拟合一元线性回归方程的几个结论回归系数的解释遗漏变量会造成内生性 xff08 扰动项和变量相
  • C++编译报错:||error: ld returned 1 exit status|

    这个问题我遇到过三次了 xff0c 每次好像原因都不一样 xff0c 在网上看到很多博客都记录了这个问题 xff0c 每人原因也都不同 xff0c 所以可以有多种原因都引发这个错误 但我不懂ld returned 1 exit status
  • C++ day34 异常(三)异常规范,未捕获异常,意外异常,异常导致内存泄漏

    文章目录 异常规范 xff08 C 43 43 98添加 xff0c C 43 43 11已摒弃 xff0c 不建议使用 xff09 异常规范的作用 xff08 正是这俩作用的鸡肋和难办使它失去了粉丝 xff09 C 43 43 11支持的
  • C++ day37 标准模板库STL初识

    文章目录 简介是什么 xff1a 容器类模板 xff0c 迭代器类模板 xff0c 函数对象模板 xff0c 算法模板的集合STL不是面向对象编程 xff0c 而是泛型编程 xff01 历史 xff1a 1994年发布 模板类vector示
  • STM32烧录 Error:Flash Download Failed-“Cortex-M3“ 解决方案—ST-Link调试

    STM32烧录 Error Flash Download Failed 34 Cortex M3 34 解决方案 ST Link调试 开发环境介绍设置步骤1 于Device中选择与你的开发板相匹配的芯片 xff0c 一般主芯片上都有标注2
  • SQL (十四)插入数据(insert语句,把数据插入表中)

    文章目录 插入完整的行 xff1a values子句不安全写法安全写法 xff1a 在表名后的括号明确给出列名小结 插入行的一部分 xff1a 简单插入某些查询的结果 xff08 即检索出的数据 xff09 xff1a insert sel
  • 模2除法(CRC冗余码计算)和二进制/十进制除法

    文章目录 CRC循环冗余检验 xff1a 余数为0就没出错 xff1b 不能确定哪几个比特出错了二进制除法 xff08 和十进制除法其实一样 xff01 xff09 模2除法 xff08 不同于二进制除法 xff01 本质就是异或而已 xf