惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
V
Visual Studio Blog
C
Check Point Blog
Google DeepMind News
Google DeepMind News
S
SegmentFault 最新的问题
博客园 - 聂微东
量子位
T
Tailwind CSS Blog
罗磊的独立博客
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
L
LangChain Blog
小众软件
小众软件
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Security Latest
Security Latest
M
MIT News - Artificial intelligence
Know Your Adversary
Know Your Adversary
MongoDB | Blog
MongoDB | Blog
Google DeepMind News
Google DeepMind News
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
爱范儿
爱范儿
T
The Exploit Database - CXSecurity.com
有赞技术团队
有赞技术团队
V
Vulnerabilities – Threatpost
Martin Fowler
Martin Fowler
A
Arctic Wolf
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 司徒正美
Cyberwarzone
Cyberwarzone
阮一峰的网络日志
阮一峰的网络日志
The Hacker News
The Hacker News
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
GbyAI
GbyAI
Latest news
Latest news
云风的 BLOG
云风的 BLOG
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
腾讯CDC
AWS News Blog
AWS News Blog
aimingoo的专栏
aimingoo的专栏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
L
Lohrmann on Cybersecurity
博客园 - Franky
S
Securelist
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Threatpost
美团技术团队

博客园 - 欢乐豆123

软件设计师考试 - 有限自动机 软件设计师考试 - 排序算法 哈夫曼树以及哈夫曼编码 软件设计师案例题型 - DFD(数据流图) 软件设计师考试 - 二分查找 软件设计师考试 - Gantt图与PERT图(项目管理) 软件设计师考试 - 数据表示(原码、反码、补码、移码) 软件设计师考试 - 上午题型分析 软件设计师考试 - 下午题型分析 软件设计师考试-应用技术 内存溢出问题 常见的算法类型 排序算法的介绍 微信生态梳理 Elasticsearch 实战:基于 function_score 的搜索与权重排序 Nexus的简单介绍以及如何上传自定义包 设计模式-桥接模式(Bridge Pattern) 设计模式简介 jmeter压测 sdkman-管理多个版本的JDK SpringBoot中使用Aop统一拦截MQ消息处理 项目管理流程以及规范 Java-泛型的使用
海明码介绍
欢乐豆123 · 2025-09-17 · via 博客园 - 欢乐豆123

海明码介绍

   概要

   在我们日常生活中,很多设备都需要传输和存储数据,比如手机发短信、电脑保存文件、卫星发送照片。可是,数据传输和存储的过程中,经常会出现“小差错”,比如:信号干扰导致传过去的数字发生变化、存储芯片里某个位被意外翻转等等。这些小错误会让信息变得错误甚至没法用。

   传统的错误检测方法只能告诉我们“有错”,却不知道错在哪儿,也不能自己修正。那么有没有什么办法除了检错以外还能纠错呢?必须有啊,这就是这篇文档要介绍的海明码。

   一、什么是海明码

   海明码(Hamming Code)是一种常见的错误检测和纠正码,用于在数据传输过程中检测和纠正错误。它由理查德·海明(Richard Hamming)于1950年提出,具有简单、高效的特点,在计算机通信和存储系统中得到广泛应用。海明码通过在数据中插入冗余位(校验位),使得接收方能够检测到并纠正单个位错误。

   海明码的厉害之处就在于,它不仅能发现数据有错,还能准确地找到错在哪一位,然后帮我们把错误自动改正。这样一来,无论是手机、电脑还是卫星,都能更准确地传递和保存信息,让我们的生活更加顺畅和可靠。

   二、海明码的基本原理 

   1.  基本原理

   海明码基本思想是分组偶校验,由信息位(n)和校验位(k)组成,海明码的校验位计算公式:2^k >= n+k+1

  •  2^k 表示:k 个校验位对应 2^k 种状态
  •  n + k + 1 表示:n + k 代表任何一位都可能出错,1 代表一种正确的状态

   2. 计算海明码的具体步骤

   1)确定海明码位数:n+k

   2)通过信息位算出校验位:2^k >= n+k+1  已知n的值,计算出k的值

   3)安排海明码的位置信息

   校验位的位置编号为:2^(k-1),然后将将信息位填入剩余位置

   4) 用异或运算算出校验位,得到最终的海明码

   三、计算海明码举例

   举例:信息位为4,内容为1011,计算出校验位以及海明码

   1.  根据公式计算出校验位以及海明码位数

   根据海明码的校验位计算公式:2^k >= n+k+1,n为4,k为3,则海明码位数为4+3=7

   2. 安排海明码位置信息如下

image

   说明:P表示校验位,D表示数据位

   将海明码的位从左往右编号为第1位开始(从 1 开始编号,而不是从 0)。

   在这些位中:

   2 的幂次位置(即1、2、4、8...)为 校验位(P)

   其他位置为信息位(D)

   3. 计算校验位对应的二进制数

   1)校验位对应各信息位二进制数为 1 的组合:

   P1 对应的信息位编号: 3、5、7 (0001 最后一位是1的信息位)

   P2 对应的信息位编号: 3、6、7 (0010 倒数第2位是1的信息位)

   P3 对应的信息位编号: 5、6、7 (0100 倒数第3位是1的信息位)

   2)将各信息位的值进行异或运算,求得校验位的值:

   P1 -> 3/5/7-> D1⊕D2⊕D4-> 1⊕0⊕1-> 0

   P2 -> 3/6/7-> D1⊕D3⊕D4 -> 1⊕1⊕1 -> 1

   P3 -> 5/6/7 -> D2⊕D3⊕D4 -> 0⊕1⊕1-> 0

   完善后的海明码位置信息如下:

image

   最终海明码为:0110011