跳到正文
IGCSE·Tuition
计算机科学 · 课程

用例题解释奇偶校验

奇偶校验看起来只是数数的小技巧,但数对了,仍然可能说错它到底证明了什么。

本页内容
  1. 如何求奇偶位?
  2. 例题详解
  3. 学生常犯什么错误?
  4. 自我检测
  5. 下一步

**奇偶校验(parity)**是在每组位上增加一个额外位,使 1 的个数始终为偶数(偶校验)或始终为奇数(奇校验)。接收方重新数 1 的个数。如果奇偶性不对,就说明出了错。

这一课建立在串行与并行传输以及数字与文本的表示中的二进制模式之上。

如何求奇偶位?

  1. 数出数据位中 1 的个数。
  2. 偶校验:让总数为偶数。如果个数是奇数,奇偶位为 1;如果是偶数,奇偶位为 0。
  3. 奇校验:让总数为奇数。如果个数是偶数,奇偶位为 1;如果是奇数,奇偶位为 0。
  4. 把奇偶位接在数据上。位置需要事先约定,本课放在末尾。

例题详解

用偶校验发送 7 位模式 1011001。

**第 1 步,数。**各位是 1,0,1,1,0,0,1,1 的个数是 4。

**第 2 步,决定。**4 已经是偶数,所以奇偶位是 0。

**第 3 步,发送。**发送的字节是 10110010。

**第 4 步,无错接收。**接收方数 10110010 中 1 的个数,又得到 4,是偶数,校验通过。

**第 5 步,一位翻转。**假设字节变成 10010010。1 的个数现在是 3,是奇数,所以接收方报告错误。

下面是用 Cambridge 风格伪代码写的同一个计数过程(7 位数据):

count ← 0
FOR i ← 1 TO 7
   IF Bits[i] = 1 THEN
      count ← count + 1
   ENDIF
NEXT i
IF count MOD 2 = 0 THEN
   parity ← 0
ELSE
   parity ← 1
ENDIF

对 1011001 的追踪:i=1 后 count 为 1,i=2 仍为 1,i=3 变为 2,i=4 变为 3,i=5 仍为 3,i=6 仍为 3,i=7 变为 4。然后 4 MOD 2 = 0,所以 parity = 0,与手算相符。

学生常犯什么错误?

常见结论:“奇偶校验通过了,所以数据是正确的。”

这并不可靠。拿上面的 10110010,翻转第二位和第四位,得到 11100010。1 的个数仍是 4,校验通过,数据却是错的。更正的写法是:“奇偶校验通过,所以没有检测到错误,但偶数个位的改变仍可能被隐藏。”

自我检测

1. 求 1110110 的偶校验位。

查看答案

1 的个数:1,1,1,0,1,1,0 共 5 个。五是奇数,所以奇偶位必须是 1。完整字节为 11101101,有 6 个 1,是偶数。

2. 使用奇校验。一个字节以 01100110 到达。能检测出错误吗?

查看答案

1 的个数:0,1,1,0,0,1,1,0 共 4 个,是偶数。奇校验需要奇数个,所以检测到错误。

3. 解释为什么两位翻转可能不被检测到。

查看答案

每次翻转使 1 的个数改变一个。两次翻转可能互相抵消,个数的奇偶性不变,校验看起来就通过了。

下一步

奇偶校验是最简单的校验。下一课看覆盖整块数据的校验和(checksum)。你可以在练习题里测试自己的计数,或用受限伪代码追踪训练器逐步运行上面的循环。

如果你数得准确,但解释的措辞仍然丢分,我们的老师可以在一对一线上计算机科学补习里帮助你。

常见问题

偶校验和奇校验有什么区别?

偶校验是选择奇偶位,使字节里 1 的总数(包括奇偶位)为偶数。奇校验则要求总数为奇数。发送方和接收方必须在发送数据前约定好用哪一种。

奇偶校验能告诉我哪一位出错吗?

不能。奇偶校验只显示 1 的个数不对,所以至少有一位改变了,但无法指出是哪一位,因此接收方通常会要求重发。要纠正某一位,需要额外的信息,后面关于纠正的一课会讲。

为什么奇偶校验会漏掉错误?

如果有两位翻转,1 的个数可能改变 2,或者保持不变,奇偶性看起来仍然正确。奇偶校验能检测奇数个位的改变,却无法检测偶数个位的改变。

更新于:

下一步

如果你会求奇偶位,却在解释题上丢分,一对一的老师可以用你自己的例子练习准确的措辞,直到自然流畅。

一小时付费试听课,按所安排老师确认的收费,RM80 起。 其他费用、时间安排及后续课程,在试听课后由家长与老师直接确认。

补习由家长或监护人安排。用 WhatsApp 把这页发给他们,他们就可以替你咨询。

是家长或监护人?在这里咨询

已通过我们的服务帮助 9,000+ 名学生