Title

Channing Hsu

软件设计师考试(软考中级)中,数据校验方法是计算机组成原理和数据通信基础部分的高频考点。主要考察三种常见的校验码:奇偶校验码海明码循环冗余校验码(CRC)
j
这三种方法的核心区别在于:检错能力纠错能力以及编码效率。以下是针对考试的详细解析:


1. 奇偶校验码 (Parity Check)

这是最简单、最基础的校验方法,常用于内存校验或简单的字符传输(如ASCII码)。

  • 原理
    • 在数据位后面增加1位校验位。
    • 奇校验:使整个编码(数据位+校验位)中“1”的个数为奇数
    • 偶校验:使整个编码中“1”的个数为偶数
  • 检错与纠错能力
    • 检错:只能检测出奇数个位出错(如1位、3位…)。如果同时有2位出错,奇偶性不变,无法检测。
    • 纠错无纠错能力。发现错误后通常只能请求重传。
  • 码距(最小码距为2,能检1位错,不能纠错)。
  • 考试重点
    • 给定数据,计算奇/偶校验位是0还是1。
    • 理解其局限性(无法检偶数位错,无法纠错)。

2. 海明码 (Hamming Code)

海明码是一种利用奇偶性检错并纠错的校验码,是软考计算题的重灾区。

  • 核心公式(海明不等式): 若信息位为 位,校验位为 位,要能纠正1位错误,必须满足:

    • :数据位数
    • :校验位数
    • :海明码总位数
    • :代表一种“无错”的状态
  • 工作原理

    1. 确定校验位位置:校验位 放在海明码的第 位上(即第1, 2, 4, 8, 16…位)。
    2. 分组校验:每个数据位由多个校验位共同校验,每个校验位负责特定的数据位组合。
    3. 纠错过程:接收端重新计算校验位,将得到的校验结果组成一个二进制数(指错字),该数值直接对应出错位的位置。例如结果为 011 (二进制3),则表示第3位出错,取反即可纠正。
  • 检错与纠错能力

    • 纠错:能自动纠正1位错误。
    • 检错:若配合额外的全校验位,可检测2位错(但通常考试默认指纠1位错的情况)。
  • 考试重点

    • 计算校验位位数:给出数据位 ,求最小的
      • :数据位8位,。当 不成立;当 成立。故需4位校验位。
    • 计算海明码序列:给定数据,写出完整的海明码。
    • 定位错误:给定接收到的海明码,判断哪一位出错。

3. 循环冗余校验码 (CRC, Cyclic Redundancy Check)

CRC是数据通信(如以太网、磁盘存储)中最常用的检错方法,检错能力极强,但通常不具备纠错能力(或纠错成本极高)。

  • 原理

    • 基于模2除法(异或运算,不借位)。
    • 发送方和接收方约定一个生成多项式 (对应一个二进制除数)。
    • 发送端
      1. 在数据位后面补 个0( = 生成多项式位数 - 1)。
      2. 用补0后的数据除以 (模2除法)。
      3. 得到的余数即为FCS(帧检验序列/校验码)。
      4. 将余数替换掉末尾的 个0,发送出去。
    • 接收端
      1. 用收到的完整数据除以同样的
      2. 余数为0,则认为传输无误;若余数不为0,则出错。
  • 检错与纠错能力

    • 检错:能力很强。能检测出所有单个位错、双位错、奇数个位错以及长度小于等于 的突发错误。
    • 纠错:通常不用于纠错,发现错误后请求重传(ARQ机制)。
  • 考试重点

    • 模2除法计算:这是必考计算题。务必掌握“异或”代替“减法”的规则(相同为0,不同为1)。
    • 生成多项式转换:能将 转换为二进制 10011
    • 校验码位数:若生成多项式最高次幂为 ,则校验码位数为 位(除数长度为 位)。

4. 三种校验方法对比总结(备考速记表)

特性 奇偶校验码 海明码 (Hamming) 循环冗余校验 (CRC)
主要功能 检错 检错 + 纠错 强力检错
纠错能力 能纠正 1位 通常不纠错(重传)
检错能力 仅奇数个位错 1位错(可扩展) 极强(突发错误也能检)
冗余度 低(仅1位) 中(需满足 中/高(取决于多项式)
实现复杂度 简单(硬件电路简单) 中等 较复杂(需除法电路)
典型应用 内存条、ASCII传输 内存ECC、控制器内部 以太网帧、硬盘、ZIP文件
核心考点 奇偶性判断 海明不等式、定位错误位 模2除法计算余数

5. 软考真题解题技巧

  1. 看到“纠正1位错误” 优先想海明码,套用公式
  2. 看到“生成多项式”、“模2除法”、“余数” 肯定是CRC,拿起笔做异或除法。
  3. 看到“码距”
    • 码距 与检错/纠错的关系公式(通用理论,不仅限于上述三种):
      • 检测 个错:
      • 纠正 个错:
      • 纠正 个错且检测 个错():
    • 奇偶校验码距为2(检1错);海明码(纠1错)码距至少为3。

掌握以上三点(奇偶、海明、CRC)及其计算逻辑,基本可以拿下软件设计师考试中关于数据校验的所有分数。

评论