模2除法(CRC校验码计算)模2除法和算数除法不同,文中例子120/13用模2除法结果:商11余数7,而算数除法结果:商9余数3
https://blog.csdn.net/qq_33411687/article/details/82593466
鉴于网上的讲解自己好不容易才看懂…所以整理了一下, 也方便大家能够理解
模2加减法
模2除法需要用到模2加减法
,关于模2加减法
,其实就是异或操作,规则如下:
//不需要考虑进位和借位
0 ± 0 = 0
1 ± 1 = 0
0 ± 1 = 1
1 ± 0 = 1
例: 1101 ± 1001 = 0100
计算如下:1 1 0 1 ± 1 0 0 1 -----------0 1 0 0
模2除法:
X除以P(对X和P做模2加减法),被除数首位为1时,商1,为0时商0
所得余数去除首位(即左移一位):(不知道为什么要去除首位)
- R第一位为0,将其作为新的被除数,除以0(应该是P),此时其首位为0,商即为0
- R第一位为1,将其作为新的被除数,除以P,此时其首位为1,商即为1
重复第2步直到R位数少于P位数
(没有讲到为什么要去除首位(自己备注)猜测和寄存器移位有关系,也有点类似算数除法竖式中每一步的商和除数的积和上面的被除数差的最高位是0例如163除以7)
例:1111000
对除数1101
做模2除法:
先说结果: 商1011
余111
整体运算
1 0 1 1 //商
---------------
1 1 1 1 0 0 0 //被除数,注意首位为1
1 1 0 1 //被除数首位为1,除以除数
---------------0 1 0 0 0 0 //余数去除首位,作为新的被除数0 0 0 0 //被除数首位为0,除以0
---------------1 0 0 0 0 //余数去除首位,作为新的被除数1 1 0 1 //被除数首位为1,除以除数
---------------1 0 1 0 //余数去除首位,作为新的被除数1 1 0 1 //被除数首位为1,除以除数
---------------1 1 1 //余数,此时余数位数少于除数,不能继续除了
分步分析
第一步(每一步其实都是模2加减法运算):
1 //商
-------------
1 1 1 1 0 0 0 //被除数,注意首位为1
1 1 0 1 //除数
-------------
0 0 1 0 0 0 0 //余数,模2运算后结果
商的第一位:被除数首位为1,商为1(只要被除数首位非0,商就是1)
第二步:余数去除首位(左移一位),当第一位为0时,除以0;为1时,除以除数。
1 0 //商
---------------0 1 0 0 0 0 //余数去除首位,作为新的被除数0 0 0 0 //被除数首位为0,除以0
---------------0 1 0 0 0 0 //余数,模2运算后结果
商的第二位:被除数首位为0,商为0(只要被除数首位是0商就是0)
第三步
1 0 1 //商
----------------1 0 0 0 0 //余数去除首位,作为新的被除数1 1 0 1 //被除数首位为1,除以除数
----------------0 1 0 1 0 //余数,模2运算后结果
商的第三位:被除数首位为1,商为1
第四步
1 0 1 1 //商
----------------1 0 1 0 //余数去除首位,作为新的被除数1 1 0 1 //被除数首位为1,除以除数
----------------0 1 1 1 //余数,此时余数位数(这里的0要忽略掉,不参与下一轮,因为最上面的被除数后面//没有数可以给这里往后补一位了)少于除数位数,不能继续除了
商的第四位:被除数首位为1,商为1
此时不能继续做除法,计算结束
得到最终结果: 商1011
余111
模2除法(CRC校验码计算)模2除法和算数除法不同,文中例子120/13用模2除法结果:商11余数7,而算数除法结果:商9余数3相关推荐
- C语言CRC校验码计算与校验
循环冗余校验(cyclicredundancy check,CRC)对传输序列进行一次规定的除法操作,将除法操作的余数附加在传输信息的后面.在接收端,也对收到的数据做相同的除法.如果接收端除法得到的结 ...
- CRC校验码计算,以常用CRC-8为例
CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定. CRC校验原理:在要发送的帧后面附加一个数,生成一个新帧发送给接收端.它要使所生成的新帧 ...
- 16位CRC校验码计算,485MODBUS计算
CRC计算方法是: 1. 加载一值为0XFFFF的16位寄存器,此寄存器为CRC寄存器. 2. 把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位的CRC寄存器的相异或,异或的结果仍存放于该C ...
- 32位crc校验码程序_CRC码计算及校验原理的最通俗诠释
CRC校验原理 CRC校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的.其实很简单的问题,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注 ...
- CRC校验码生成逻辑的实现原理详解——结合C语言和Verilog语言代码分析
文章目录 前言 一.CRC校验码的计算 1.CRC模型 2.CRC计算 步骤1:输入数据与初始值模2加并左移 步骤2:被除数与多项式模2除 二.CRC校验码生成逻辑的C语言实现 1.实现代码 2.代码 ...
- Python—CRC校验码,计算2进制校验数据的校验码
有一些网站可以实现crc校验,但几乎均为国际标准没法修改,缺少自定义功能,在CSDN看到这篇文章的修改版,但我认为自定义功能仍然不完善,所以优化出一个二进制信息码,多项式不限的自定义CRC校验码程序. ...
- can协议crc计算_基于CAN总线的CRC校验码的原理与实现
基于CAN总线的CRC校验码的原理与实现 王鹏 [摘 要]CAN总线又称为控制器局域网技术,属于工业现场总线,应用范围很广.CAN系统中通常 采用反馈重发机制对通信过程进行差错控制.当接收端反馈给发送 ...
- modbus协议crc校验c语言代码,MODBUS通信协议中CRC校验码的计算(C/C++)实现
错误检测的方法 错误校验(CRC)域占用两个字节,包含了一个16位的二进制值.CRC值由传输设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC值,然后与接收到的CRC域中的值进行比较 ...
- Modbus-RTU通讯协议中CRC校验码的计算步骤及算法代码
在CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算. CRC计算方法是: 1. 预置1个16位的寄存器为十六进制FFFF(全1),此寄存器为CRC寄存器 ...
- 【计算机网络】CRC校验码||循环冗余码详解及计算习题
[计算机网络]CRC校验码||循环冗余码详解及计算习题
最新文章
- 登高自卑 | 我的NumPy笔记
- 【廖雪峰python入门笔记】if语句
- ngx_lua module 模块安装
- 一个简单的blog系统(九) 增加标签和标签页面
- 十二、“最是真心藏不住,一言一语总关情。”(2021.2.11)
- 如何将Chrome本地安装的扩展应用导出到本地
- SAP Cloud for Customer客户主数据的地图集成
- P6242-[模板]线段树3【吉司机线段树】
- 基于JAVA+SpringMVC+Mybatis+MYSQL的理发预约系统
- pytorch nn.LogSoftmax
- javascript学习5
- 古代汉语(王力版)笔记 通论8-9
- 什么是驻点和拐点_驻点、极值点、拐点、鞍点的区别与联系
- iMeta | 南农沈其荣团队发布微生物网络分析和可视化R包ggClusterNet
- Loongson_灵珑9S2A 逸珑8089 3B1500龙芯电脑的使用感触
- 左岸读书-编程是最能表达人类的思维的语言
- 数据资产运营 = 数据资产盘点 + 数据治理 + 数据价值实现
- Windows下cmd命令—systeminfo
- 67 个拯救前端开发者的工具、库和资源
- 13-二维数组和字符串