公司动态

七位记录怎样定位并纠正一次位翻转:独立演算第10例

2026-11-08

简单校验可以提示记录出了错,但未必指出哪一位。给四位数据增加三位特定校验,可以在明确的单次位翻转假设下定位并修正错误。

七个位置从一开始编号,校验位在一、二、四位,数据在三、五、六、七位。每个校验组由位置编号对应二进制位为一的成员组成,组内采用偶数个一;收到后把失败组的编号相加,得到综合校验值。

这一例的完整输入

每行给出四位数据所代表的零至十五整数,以及翻转位置;位置零表示没有错误。

逐项计算记录

原数 | 翻转位 | 编码 | 收到 | 综合值 | 修正 | 解码 8 | 3 | 1110000 | 1100000 | 3 | 1110000 | 8 3 | 0 | 1000011 | 1000011 | 0 | 1000011 | 3 4 | 2 | 1001100 | 1101100 | 2 | 1001100 | 4 7 | 2 | 0001111 | 0101111 | 2 | 0001111 | 7 0 | 6 | 0000000 | 0000010 | 6 | 0000000 | 0 5 | 5 | 0100101 | 0100001 | 5 | 0100101 | 5 4 | 5 | 1001100 | 1001000 | 5 | 1001100 | 4 10 | 6 | 1011010 | 1011000 | 6 | 1011010 | 10

读表时先把输入与计算后的结果分开。空值表示这一步没有适用对象或没有可用结果,不应自动换成零。编号只负责识别本例中的元素,同一个数字出现在不同字段时,要先确认它代表位置、对象还是数值。

怎样复核和使用

综合值为零就不翻转,其他值则翻转对应位置,再取出四个数据位。表中每行最多翻转一位,因此可以把恢复结果与原数据逐项比较;位序必须保持一致。

这不是能纠正任意损坏的保证。若有两个或更多错误,非零综合值可能指向一个原本正确的位置;本例没有增加总校验位,不能据此声称具备可靠的双位错误检测能力。

可以先遮住记录表,只按上述规则重算前两步,再选择一个边界条件重新试算。若结果不一致,应逐项检查输入顺序、端点是否包含以及状态在哪一步更新;不要只看最终合计相同就认为中间处理也完全正确。