Title
在软件设计师考试(软考中级)中,数据校验方法是计算机组成原理和数据通信基础部分的高频考点。主要考察三种常见的校验码:奇偶校验码、海明码和循环冗余校验码(CRC)。
j
这三种方法的核心区别在于:检错能力、纠错能力以及编码效率。以下是针对考试的详细解析:
1. 奇偶校验码 (Parity Check)
这是最简单、最基础的校验方法,常用于内存校验或简单的字符传输(如ASCII码)。
- 原理:
- 在数据位后面增加1位校验位。
- 奇校验:使整个编码(数据位+校验位)中“1”的个数为奇数。
- 偶校验:使整个编码中“1”的个数为偶数。
- 检错与纠错能力:
- 检错:只能检测出奇数个位出错(如1位、3位…)。如果同时有2位出错,奇偶性不变,无法检测。
- 纠错:无纠错能力。发现错误后通常只能请求重传。
- 码距:
(最小码距为2,能检1位错,不能纠错)。 - 考试重点:
- 给定数据,计算奇/偶校验位是0还是1。
- 理解其局限性(无法检偶数位错,无法纠错)。
2. 海明码 (Hamming Code)
海明码是一种利用奇偶性来检错并纠错的校验码,是软考计算题的重灾区。
-
核心公式(海明不等式): 若信息位为
位,校验位为 位,要能纠正1位错误,必须满足: :数据位数 :校验位数 :海明码总位数 :代表一种“无错”的状态
-
工作原理:
- 确定校验位位置:校验位
放在海明码的第 位上(即第1, 2, 4, 8, 16…位)。 - 分组校验:每个数据位由多个校验位共同校验,每个校验位负责特定的数据位组合。
- 纠错过程:接收端重新计算校验位,将得到的校验结果组成一个二进制数(指错字),该数值直接对应出错位的位置。例如结果为
011(二进制3),则表示第3位出错,取反即可纠正。
- 确定校验位位置:校验位
-
检错与纠错能力:
- 纠错:能自动纠正1位错误。
- 检错:若配合额外的全校验位,可检测2位错(但通常考试默认指纠1位错的情况)。
-
考试重点:
- 计算校验位位数:给出数据位
,求最小的 。 - 例:数据位8位,
。当 时 不成立;当 时 成立。故需4位校验位。
- 例:数据位8位,
- 计算海明码序列:给定数据,写出完整的海明码。
- 定位错误:给定接收到的海明码,判断哪一位出错。
- 计算校验位位数:给出数据位
3. 循环冗余校验码 (CRC, Cyclic Redundancy Check)
CRC是数据通信(如以太网、磁盘存储)中最常用的检错方法,检错能力极强,但通常不具备纠错能力(或纠错成本极高)。
-
原理:
- 基于模2除法(异或运算,不借位)。
- 发送方和接收方约定一个生成多项式
(对应一个二进制除数)。 - 发送端:
- 在数据位后面补
个0( = 生成多项式位数 - 1)。 - 用补0后的数据除以
(模2除法)。 - 得到的余数即为FCS(帧检验序列/校验码)。
- 将余数替换掉末尾的
个0,发送出去。
- 在数据位后面补
- 接收端:
- 用收到的完整数据除以同样的
。 - 若余数为0,则认为传输无误;若余数不为0,则出错。
- 用收到的完整数据除以同样的
-
检错与纠错能力:
- 检错:能力很强。能检测出所有单个位错、双位错、奇数个位错以及长度小于等于
的突发错误。 - 纠错:通常不用于纠错,发现错误后请求重传(ARQ机制)。
- 检错:能力很强。能检测出所有单个位错、双位错、奇数个位错以及长度小于等于
-
考试重点:
- 模2除法计算:这是必考计算题。务必掌握“异或”代替“减法”的规则(相同为0,不同为1)。
- 生成多项式转换:能将
转换为二进制 10011。 - 校验码位数:若生成多项式最高次幂为
,则校验码位数为 位(除数长度为 位)。
4. 三种校验方法对比总结(备考速记表)
| 特性 | 奇偶校验码 | 海明码 (Hamming) | 循环冗余校验 (CRC) |
|---|---|---|---|
| 主要功能 | 检错 | 检错 + 纠错 | 强力检错 |
| 纠错能力 | 无 | 能纠正 1位 错 | 通常不纠错(重传) |
| 检错能力 | 仅奇数个位错 | 1位错(可扩展) | 极强(突发错误也能检) |
| 冗余度 | 低(仅1位) | 中(需满足 |
中/高(取决于多项式) |
| 实现复杂度 | 简单(硬件电路简单) | 中等 | 较复杂(需除法电路) |
| 典型应用 | 内存条、ASCII传输 | 内存ECC、控制器内部 | 以太网帧、硬盘、ZIP文件 |
| 核心考点 | 奇偶性判断 | 海明不等式、定位错误位 | 模2除法计算余数 |
5. 软考真题解题技巧
- 看到“纠正1位错误”
优先想海明码,套用公式 。 - 看到“生成多项式”、“模2除法”、“余数”
肯定是CRC,拿起笔做异或除法。 - 看到“码距”:
- 码距
与检错/纠错的关系公式(通用理论,不仅限于上述三种): - 检测
个错: - 纠正
个错: - 纠正
个错且检测 个错( ):
- 检测
- 奇偶校验码距为2(检1错);海明码(纠1错)码距至少为3。
- 码距
掌握以上三点(奇偶、海明、CRC)及其计算逻辑,基本可以拿下软件设计师考试中关于数据校验的所有分数。
评论