Appearance
题目
若甲向乙发送数据时采用 CRC 校验,生成多项式为 G(x) = x⁴ + x + 1(即 G = 10011),则乙接收到下列比特串时,可以断定其在传输过程中未发生错误的是( )。
错因
A
把 101110000 模 2 除以 10011 得余数 0011 ≠ 0,按 CRC 校验规则判定已出错,不是答案。选 A 的人可能在长除法的某一步漏算或字节对齐错(常见错处:跳过了"高位为 0 时直接移位"的步骤,导致某次本不该异或的位置做了异或)。
B
模 2 除法得余数 0010 ≠ 0,已出错。选 B 的人多半是在第二轮异或时(位 6 处)异或对了,但在最后一轮(位 1 / 位 0 移位时)多算了一次,把 0010 的尾巴混成了 0000。
C
模 2 除法得余数 0011 ≠ 0,已出错。选 C 的人和 A 选的人错处类似,常见错路:CRC 的位移和异或操作做混了,导致最终余数总是 0011 这种"接近但不为 0"的值。
总解析
第一步:明确 CRC 校验的判定规则
发送端:用模 2 除法 (binary mod-2 / XOR division) 把"原数据 + 0 填补"除以 G,余数即为 CRC 校验码,附加到原数据末尾发送出去。
接收端:把收到的整个比特串(含 CRC 校验位)模 2 除以 G。
- 余数 = 0 → 未发生错误
- 余数 ≠ 0 → 检测到错误
第二步:对四个候选串分别做长除法
生成多项式 G = 10011(5 位,校验码 4 位)。
A:101110000 ÷ 10011
101110000 ÷ 10011
取高 5 位 [10111],10111 XOR 10011 = 00100
余 0010 0 0000,下一非零位在位 6
[10000] XOR 10011 = 00011
余 ... 0 0011,剩余位都是 0
余数 = 0011 ≠ 0B:101110100 ÷ 10011
[10111] XOR 10011 = 00100 → 剩余 001000100
[10001] XOR 10011 = 00010 → 剩余 000000010
余数 = 0010 ≠ 0C:101111000 ÷ 10011
[10111] XOR 10011 = 00100 → 剩余 001001000
[10010] XOR 10011 = 00001 → 剩余 000010000
[10000] XOR 10011 = 00011 → 剩余 ........0011
余数 = 0011 ≠ 0D:101111100 ÷ 10011
[10111] XOR 10011 = 00100 → 剩余 001001100
[10011] XOR 10011 = 00000 → 剩余 000000000
余数 = 0000 ✓第三步:比对
| 选项 | 比特串 | 余数 | 是否未出错 |
|---|---|---|---|
| A | 101110000 | 0011 | ❌ |
| B | 101110100 | 0010 | ❌ |
| C | 101111000 | 0011 | ❌ |
| D | 101111100 | 0000 | ✅ |
最终答案是 D(101111100)。
编者注(生僻术语):模 2 除法(binary mod-2 division)是 CRC 的核心运算——加减法都是 XOR,不带进位 / 借位。比一般二进制除法简单,但要训练成肌肉记忆。考研做 CRC 题的关键不是公式,而是手工长除法的快稳准:① 高位为 0 跳过(不异或,只移位);② 高位为 1 才用 G 异或;③ 异或后高位必为 0,可以直接换写覆盖。题面 G = 是 5 位,所以余数 4 位、校验码也是 4 位。