【计算机系统】校验码

news2025/6/21 10:19:59

【计算机系统】校验码

  • 校验码
    • 奇偶校验码
    • 海明码
      • 校验位的位数
      • 校验位的位置
      • 确定校验的值
      • 校验错误检测
    • 循环冗余校验码

校验码

计算机系统运行时,为了确保数据在传送过程中正确无误,一是提高硬件电路的可靠性,二是提高代码的校验能力。通常使用校验码的方法来检测传送的数据是否出错。

校验码的基本思想是通过引入冗余信息并使用校验算法来检测和纠正数据的错误,从而提高数据的完整性和可靠性。具体如下。


奇偶校验码

e . g . e.g. e.g. 一个简单的例子

假设要传输的数据是 01010011,这是一个8位的二进制数。

奇校验: 在奇校验中,需要确保总共包含奇数个1。首先,计算数据中的1的数量,这里有4个1。为了保证总共有奇数个1,需要在数据末尾添加一个1,使其变成 010100111。这个额外的末尾的 1 就是奇校验位

偶校验: 在偶校验中,需要确保总共包含偶数个1。计算数据中的1的数量,这里有4个1,为了保证总共有偶数个1,需要在数据末尾添加一个0,使其变成 010100110。这个额外的末尾的 0 就是偶校验位


海明码

海明码在数据位之间的特定位置上插入 k k k 个校验位,通过校验位与数据位结合的异或方法来检错和纠错。

校验位的位数

设数据位是 n n n 位,校验位是 k k k 位,则 n n n k k k 必须满足以下关系:
2 k − 1 ≥ n + k 2^k-1 ≥ n+k 2k1n+k

假设对于 8 位的数据位,进行海明校验需要 4 个校验位: 2 3 − 1 < 8 + 3 , 2 4 − 1 ≥ 8 + 4 2^3-1 < 8+3,2^4-1 ≥ 8+4 231<8+32418+4

校验位的位置

海明码校验位的位置,又称为海明码的编码规则。

设:

  • k k k 个校验位为 P k , P k − 1 , . . . , P 1 P_k, P_{k-1}, ... , P_{1} Pk,Pk1,...,P1
  • n n n 个数据位为 D n − 1 , D n − 2 , . . . , D 0 D_{n-1}, D_{n-2}, ... , D_{0} Dn1,Dn2,...,D0
  • 对应的海明码为 H n + k , H n + k − 1 , . . . , H 1 H_{n+k}, H_{n+k-1}, ... , H_{1} Hn+k,Hn+k1,...,H1

那么:

  • P i P_i Pi 在海明码的第 2 i − 1 2^{i-1} 2i1 位置,即 H j = P i H_j = P_i Hj=Pi j = 2 i − 1 j=2^{i-1} j=2i1,数据位则依序从低到高占据海明码中剩余的位置:
    • 8 位数据位 D 7 , D 6 , D 5 , D 4 , D 3 , D 2 , D 1 , D 0 D_7, D_6, D_5, D_4, D_3, D_2, D_1, D_0 D7,D6,D5,D4,D3,D2,D1,D0,4 位校验位 P 4 , P 3 , P 2 , P 1 P_4, P_3, P_2, P_1 P4,P3,P2,P1,形成的海明码 H 12 , H 11 , . . . , H 3 , H 2 , H 1 H_{12}, H_{11}, ... , H_3, H_2, H_1 H12,H11,...,H3,H2,H1
    • 确定数据位与校验位的位置:
      • 校验码的位置在 2 0 , 2 1 , 2 2 , 2 3 2^0, 2^1, 2^2, 2^3 20,21,22,23 位置;
        在这里插入图片描述

确定校验的值

  • 奇校验与偶校验:
    • 奇校验中,校验位的值设置为确保相关数据位中包含奇数个1。如果数据位中包含偶数个1,校验位为1,以确保总和为奇数。
    • 偶校验中,校验位的值设置为确保相关数据位中包含偶数个1。如果数据位中包含奇数个1,校验位为1,以确保总和为偶数。
  • 校验位校验位置:
    • 校验位 P 1 P_1 P1 校验位置 1 , 3 , 5 , 7 , 9 , . . . 1, 3, 5, 7, 9, ... 1,3,5,7,9,...(拿1隔1)
    • 校验位 P 2 P_2 P2 校验位置 2 , 3 , 6 , 7 , 10 , 11 , . . . 2, 3, 6, 7, 10, 11, ... 2,3,6,7,10,11,...(拿2隔2)
    • 校验位 P 3 P_3 P3 校验位置 4 , 5 , 6 , 7 , 12 4, 5, 6, 7, 12 4,5,6,7,12(拿4隔4)
    • 校验位 P 4 P_4 P4 校验位置 8 , 9 , 10 , 11 , 12 8, 9, 10, 11, 12 8,9,10,11,12(拿5隔5)
    • 在这里插入图片描述
  • 校验的值(偶校验):
    • P 1 = D 0 ⨁ D 1 ⨁ D 3 ⨁ D 4 ⨁ D 6 P_1 = D_0 \bigoplus D_1 \bigoplus D_3 \bigoplus D_4 \bigoplus D_6 P1=D0D1D3D4D6
    • P 2 = D 0 ⨁ D 2 ⨁ D 3 ⨁ D 5 ⨁ D 6 P_2 = D_0 \bigoplus D_2 \bigoplus D_3 \bigoplus D_5 \bigoplus D_6 P2=D0D2D3D5D6
    • P 3 = D 1 ⨁ D 2 ⨁ D 3 ⨁ D 7 P_3 = D_1 \bigoplus D_2 \bigoplus D_3 \bigoplus D_7 P3=D1D2D3D7
    • P 4 = D 4 ⨁ D 5 ⨁ D 6 ⨁ D 7 P_4 = D_4 \bigoplus D_5 \bigoplus D_6 \bigoplus D_7 P4=D4D5D6D7
    • 其中 ⨁ \bigoplus 异或,不同为1,相同为0;

校验错误检测

校验的检测方案如下:

  • G 1 = P 1 ⨁ D 0 ⨁ D 1 ⨁ D 3 ⨁ D 4 ⨁ D 6 G_1 = P_1 \bigoplus D_0 \bigoplus D_1 \bigoplus D_3 \bigoplus D_4 \bigoplus D_6 G1=P1D0D1D3D4D6
  • G 2 = P 2 ⨁ D 0 ⨁ D 2 ⨁ D 3 ⨁ D 5 ⨁ D 6 G_2 = P_2 \bigoplus D_0 \bigoplus D_2 \bigoplus D_3 \bigoplus D_5 \bigoplus D_6 G2=P2D0D2D3D5D6
  • G 3 = P 1 ⨁ D 1 ⨁ D 2 ⨁ D 3 ⨁ D 7 G_3 = P_1 \bigoplus D_1 \bigoplus D_2 \bigoplus D_3 \bigoplus D_7 G3=P1D1D2D3D7
  • G 4 = P 1 ⨁ D 4 ⨁ D 5 ⨁ D 6 ⨁ D 7 G_4 = P_1 \bigoplus D_4 \bigoplus D_5 \bigoplus D_6 \bigoplus D_7 G4=P1D4D5D6D7
  • 若采取偶校验,则当 G 4 G 3 G 2 G 1 G_4G_3G_2G_1 G4G3G2G1 全为 0 时,接收到的数据无错误。(奇校验全部为1);

e . g . e.g. e.g. 若采取偶校验, G 4 G 3 G 2 G 1 = 1010 G_4G_3G_2G_1=1010 G4G3G2G1=1010,说明 H 10 ( D 5 ) H_{10}(D_5) H10(D5)出错,将其取反即可纠正错误。


循环冗余校验码

循环冗余校验码(CRC, Cyclic Redundancy Check)是一种用于检查数据传输或存储时是否出现错误的算法。

其基本原理是对待发送的原始数据添加一些冗余的数据,使得整个数据的CRC值为0,接收方在接收到数据后重新计算CRC,如果值不为0,则说明数据在传输过程中有错误。

e . g . e.g. e.g. 一个简单的例子如下,其中CRC使用的多项式是CRC-4: x 4 + x + 1 x^4 + x + 1 x4+x+1

原始数据: 1101
添加0: 11010000
生成多项式: 10011(因为 x 4 + x + 1 x^4 + x + 1 x4+x+1 转换为二进制为 10011)
开始模2除法:

11010000
10011     <-- 第一次异或
---------
01001000  <-- 结果,移动到下一位,重复异或操作
 10011
---------
00000100
  10011
---------
00100010
   10011
---------
00110001
从上面的结果,我们可以看到余数为 `0001`,所以CRC值为`0001`。

如此,我们得到的CRC值是 0001,因此,发送的数据应该是 11010001 。接收端收到这个数据后,可以用相同的方法再次计算CRC,如果计算出的CRC为 0000,则说明数据没有错误。


此上,为三个校验码,即 奇偶校验码、海明码与循环冗余校验码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1086666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用telnet+nc工具测试网络连通性

背景&#xff1a; 正常情况下使用ping命令即可测试网络的连通性&#xff0c;但如果做了内网穿透(端口转发)&#xff0c;则需要指定网络端口&#xff0c;此时ping命令无法实现ipport的连通性测试。则可以使用telnetnc测试网络连通性。 环境&#xff1a; 两台服务器都是按照的De…

【Spring AOP】统一异常处理

统一异常处理 统⼀异常处理使⽤的是 ControllerAdvice ExceptionHandler 来实现的&#xff0c; 类上面加上 ControllerAdvice 注解表示控制器通知类方法上面加上 ExceptionHandler 表示异常处理器&#xff0c;并添加异常返回的业务代码 两个结合表示当出现异常的时候执⾏某个…

一文带你简单了解一下堡垒机是干嘛的!

随着国家对网络安全的重视&#xff0c;随着等保政策的落地执行&#xff0c;越来越多的企业知道了堡垒机。但对于堡垒机的作用还不是很了解&#xff0c;很多人在问&#xff0c;堡垒机是干嘛的、这里我们小编就跟大家来简单唠唠。 首先我们来看看什么是堡垒机&#xff1f; 堡垒…

VBA入门3——过程和函数 (Sub | Function)

VBA基础入门2 VBA 过程和函数 (Sub | Function)VBA 过程(Sub) 入门教程和实例&#xff08;组织代码的容器&#xff09;无参数过程有参数过程调用子过程&#xff08;Sub&#xff09;调用子过程和函数的基本语法提前退出过程 VBA 函数(Function)入门教程和实例&#xff08;重复使…

Cookies Session JWT

Cookies Cookies是会话跟踪技术的一种&#xff0c;通过将数据保存到客户端的浏览器上以此来达到会话间共享数据的效果。 从打开浏览器开始访问页面直到关闭浏览器断开连接算作一次会话&#xff08;Session&#xff09;&#xff0c;一次会话中可以包含多次请求-响应。每次的请…

【linux】权限相关问题

【linux】权限相关问题 一.用户的分类sudo 二.文件执行的权限i. 文件的分类ii.人的分类三.修改创建文件的权限chmod更改文件创造的默认权限(umask) 三.删除&#xff08;粘滞位&#xff09; 一.用户的分类 在我们使用linux的时候&#xff0c;有用户类型的区分&#xff0c;不同用…

Linux环境下Qt应用程序打包与发布

本文介绍Linux环境下Qt应用程序的打包与发布。 Linux环境下&#xff0c;在开发机器上开发完应用程序&#xff0c;需要部署到其他非开发环境的机器上&#xff0c;这时&#xff0c;需要对开发的Qt应用程序进行打包&#xff0c;以确保可以在其他机器平台&#xff08;非开发环境&a…

20231012_python练习_服务端与客户端数据交互v2_增加xlsx表格数据批量导入数据库

服务端增加根据上传附件格式 xlsx 类型&#xff0c;将表格第一个sheet数据批量快速导入数据库 服务端 import socketserver import json import os #import pymysql import cx_Oracle #Oracle 数据库连接 import time import tqdm import pandas as pd import openpyxlclass …

Linux---(二)基本认识与安装

文章目录 前言一、操作系统的概念、定位二、使用XShell远程登录Linux1.下载安装XShell2.查看 Linux 主机 ip3.使用XShell登录主机4.XShell 下的复制粘贴 前言 一、操作系统的概念、定位 1.操作系统是一款进行软硬件资源管理的软件 硬件资源管理&#xff1a;将CPU、键盘、显示…

uni-app:本地缓存的使用

uni-app 提供了多种方法用于本地缓存的操作。下面是一些常用的 uni-app 本地缓存方法&#xff1a; uni.setStorageSync(key, data): 同步方式将数据存储到本地缓存中&#xff0c;可以使用对应的 key 来获取该数据。 uni.setStorage({key, data}): 异步方式将数据存储到本地缓存…

Leetcode: 931.下降路径最小和(动态规划)

1. 题目解析 LeetCode链接 根据题目可以得出&#xff0c;当处于 [i][j] 位置时只能从 [i - 1][j - 1]&#xff0c;[i - 1][j]&#xff0c;[i - 1][j 1] 这三个位置到达&#xff0c; 所以我们想要得到当前最小的路径和只需要得到上述三个位置的最小值加上该位置的值即可。 2…

Redis(五)

文章目录 一、Redis键值设计&#xff08;一&#xff09;key结构设计&#xff08;二&#xff09;拒绝BigKey什么是BigKey&#xff1f;BigKey的危害如何发现BigKey &#xff08;一&#xff09;恰当的数据类型 二、批处理优化三、服务端优化四、集群最佳实践 一、Redis键值设计 &…

区块链技术在供应链管理中的创新应用

区块链技术以其独特的不可篡改和透明性特点&#xff0c;正在逐步改变供应链管理的传统模式。本文将探讨区块链技术在供应链管理中的创新应用及其带来的效益。 区块链技术的出现为许多行业带来了创新的可能&#xff0c;其中之一就是供应链管理。通过区块链技术&#xff0c;企业可…

记录项目运行起来后在项目的控制台,直接展示抽中奖品的弹框

首先运行项目或者打开线上项目, 在控制台或者项目代码中找到调用出这个弹框的方法, 在控制台直接vm.这个方法() 来调用 可以看到弹框出来了

MyBatis基础之注解与SQL 语句构建器

文章目录 注解实现简单增删改查SQL 语句构建器SelectProvider举例 注解实现简单增删改查 在 MyBatis 的核心配置文件中&#xff0c;你需要配置的不是 mapper 映射文件&#xff0c;而是 Mapper 接口所在的包路径。 <!-- 在配置文件中 关联包下的 接口类--> <mappers&…

【STM32单片机】宠物定时喂食器设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器&#xff0c;使用按键、IIC OLED液晶、蜂鸣器、继电器投喂控制等。 主要功能&#xff1a; 系统运行后&#xff0c;OLED液晶显示初始时间&#xff0c;默认工作在自动投…

核心概念:从晶体管到集成电路到摩尔定律

目录 晶体管 集成电路 摩尔定律 总结 这芯片和半导体是不是一回事儿呢&#xff1f;怎么我有时候听人说芯片行业&#xff0c;有时候又听人说半导体行业&#xff0c;好像他们说的都是一回事&#xff1f; 不知道你是不是也有这样的问题。其实啊&#xff0c;这问题很简单&…

arm实验

设置按键中断&#xff0c;按键1按下&#xff0c;LED亮&#xff0c;再次按下&#xff0c;灭 按键2按下&#xff0c;蜂鸣器叫&#xff0c;再次按下&#xff0c;停 按键3按下&#xff0c;风扇转&#xff0c;再次按下&#xff0c;停 头文件 #ifndef __CTRL_KEY_H__ #define __CT…

python 操作FT232H——(1)准备工作与IO输出方波信号

1.准备工作&#xff1a; python环境&#xff1a; 安装python 环境&#xff0c;我目前使用的是pycharm2023.2.1 community Edition 版本 需要注意设置python解释器的版本及关联本地库&#xff0c;这样就不需要在新的工程中安装库文件了&#xff0c;&#xff08;当然也有缺点&…

Activity页面不显示toolbar

页面显示如下&#xff0c;显示toolbar, 想实现不显示toolbar&#xff0c; 1、在manifest里设置 android:theme"style/AppThemeNoTitle"&#xff0c;可以隐藏&#xff0c;但是整个页面显示为透明的了&#xff0c;activity整体类型发生改变 2、或者设置这个&#xf…