Skip to content
难度基础(★)
建议时长30分钟
本课难点
  • 检错与纠错的概念区分(能发现 vs 能定位并修正)
  • 码距 d 与检错/纠错能力的对应关系(d-1 与 $⌊ (d-1)/2 ⌋$)
  • 海明码“插入校验位”的结构与其它校验方式的差异

1.2.1 校验码概述

本课核心知识点整理
本课核心知识点手绘流程图(SVG)

本节导学

校验码解决的是一个很朴素的问题:二进制数据在传输或存储时,某一位可能从 0 变成 1,也可能从 1 变成 0。如果接收方只看到一串合法的 0/1,它很难判断这串数据是不是已经被改坏。校验码的做法是在原始信息位之外加入冗余信息,让“合法码字”变少,让错误更容易暴露出来。

课程把本章的校验码分成三类:奇偶校验、CRC 循环冗余校验、海明校验码。软件设计师考试中,奇偶校验和 CRC 多考特点,海明码考得最频繁,通常会考校验位个数、位置规律和纠错思路。

校验码的核心:用冗余换可靠性

校验码不是为了表达更多业务信息,而是为了建立一条“接收方可以复核的规则”。发送方根据原始数据计算校验位,接收方用同一规则重新检查。如果规则不成立,就说明数据发生了错误。

名称冗余位如何来主要能力软考定位
奇偶校验通常增加 1 位,让 1 的个数满足奇/偶约束可检出奇数位错误,不可纠错掌握编码方式和局限
CRC根据生成多项式做模 2 除法,余数作为校验位检错能力强,可检多位错,通常不可纠错记住“生成多项式、模 2 除法、余数”
海明码多个校验位分组交叉覆盖数据位可检错,也可纠正典型单比特错误高频,必须会公式和位置

冗余的代价是增加存储或传输位数,收益是更可靠。技术演进也沿着这条线推进:奇偶校验代价最低但能力弱;CRC 牺牲更多校验位换来更强检错;海明码进一步组织校验位,使校验结果能定位错误位置,从而具备纠错能力。

检错与纠错不是一回事

检错是发现“这串数据不对”;纠错是进一步知道“哪一位不对”,并把它改回来。对二进制而言,一旦定位到错误位,修正非常简单:0 取反为 11 取反为 0。真正困难的是定位。

用生活例子理解:如果日历告诉你 1 月 1 日是星期一,而一条消息写成“1 月 1 日星期二”,你能判断消息有问题;但如果消息里有很多字段,你还需要知道具体哪个字段错了,才谈得上自动修正。校验码也是这样:发现矛盾只是检错,定位矛盾来源才是纠错。

能力含义判断标准代表
检错能发现码字不满足约定规则接收端校验失败奇偶校验、CRC、海明码
纠错能定位错误位并修正校验结果能唯一指向错误位置海明码

码字、码距与“为什么能校验”

码字是实际参与传输或存储的整体,通常由信息位和校验位组成。码距是两个码字对应位置不同的位数;一个编码体系的最小码距 d,是任意两个合法码字之间码距的最小值。

比如只用一位二进制表示性别,合法码字可能是 01,两者只差 1 位,最小码距为 1。此时接收方收到 1,无法判断它本来就是 1,还是从 0 翻转而来。

如果把合法码字改为 0011,两个合法码字相差 2 位,最小码距变成 2。单比特翻转后会得到 0110,它们不属于合法码字集合,错误就能被发现。这就是“通过增加冗余扩大码距”的直觉。

码距越大,合法码字之间隔得越远,错误越不容易“刚好变成另一个合法码字”。一般结论是:

最多可检错位数=d1最多可纠错位数=d12

考试中看到码距题,先找最小码距 d,再套公式。注意检错能力和纠错能力不是同一个数,纠错要求更高。

三种校验码为什么逐步升级

技术优势局限为什么需要后续技术
奇偶校验只加 1 位,计算极快,实现简单偶数位错误可能漏检,无法定位错误位数据链路或存储场景需要发现更复杂的多位错误
CRC对多位错、突发错检出能力更强,硬件实现友好通常只能报错,不能告诉错在哪里需要自动修复时,仅检错不够
海明码多组交叉校验可定位单比特错误,能纠错冗余位更多,设计和编码更复杂在内存 ECC 等场景,用额外成本换可用性

备考路线

  1. 先分清“检错”和“纠错”,不要把能发现错误等同于能修正错误。
  2. 奇偶校验重点记编码规则和局限:奇数位错可检,偶数位错可能漏检,不能纠错。
  3. CRC 重点记关键词:生成多项式、模 2 除法、余数、可检错不可纠错。
  4. 海明码重点记:2rm+r+1,校验位放在 1,2,4,8,... 位置。

🧪 例题(按难度)

简单(3题)

单选
在校验码的语境中,“码字(codeword)”通常指:
单选
两个码字之间的“码距(Hamming distance)”定义为:
单选
若某编码的最小码距为 d=2,则其能力最合理的描述是:

中级(3题)

例题1(概念判断)

下列关于校验码的说法正确的是:

单选
选择正确说法:

例题2(检错/纠错区分)

下列校验方式中,通常可用于纠错的是:

单选
选择通常可用于纠错的方式:
单选
若某编码的最小码距为 d=4,则其最大检错与纠错能力分别为:

困难(1题)

填空
若某编码的最小码距为 d=5,则它最多能检错多少位、纠错多少位?

📚 本课小结

  • 校验码 = 信息位 + 冗余位
  • 检错是“发现有错”,纠错是“定位并修正”
  • 码距越大,能力越强(检错 d-1,纠错 (d1)/2