为什么要这样使用汉明码?

这里我默认读者已经掌握了汉明码的使用过程,但止不住好奇心想知道“为什么要这样做”,如果还没有搞定怎么使用的可以百度“xx详解”等字眼。

以下是个人在学习过程中的理解,因为课本和视频中告诉我怎么用后就继续讲了,搜索大佬的帖子也是详细入微的使用细节,所以不得已自己思考起了“为什么”。当然,也可能在别人眼中这个问题是个常识。。。

下面解释中会出现大量的“序号”和“二进制表示”字样,序号指的是发送的一串字节中第几位,而二进制表示就是把这个序号用二进制展开。如01010101 0101010 这一共15位,最后一个字节其数值是“0”,序号是“15”,二进制表示是“1111”

为什么要把校验位放到序号是2的n次方的位上?

因为这样可以保证每一个数据位序号转换成的二进制数都至少有两位是1,只有1位是1的序号都被安排为校验位了。这样在最后只有一个校验位异或结果出错的时候可以判断出是校验位本身出错了,有数据位出错的话可以由两个以上校验位锁定到出错位。

如序号是1、2、4、8的校验码(用2进制表示就是0001,0010,0100,1000)需要负责校验所有 序号转换成二进制后对应1、2、3、4位上是1的数据位,如序号是9的数据,其转换成2进制是1001,在第1和第4位是1,所以需要同样是第1位是1的校验位1(0001)和第四位是1的校验位8位(1000)来校验。

假如出错,为什么可以用每个校验位负责位的异或结果来判断出错位置?

理清了上面的关系,下面就好理解了,这里假设使用偶校验。

如果数据没有错误,所有的校验位异或出来都应该是0,那么假如序号9的数据出错了(唯一错误),如何判断其位置呢?

还记得上面提到的“校验位序号用二进制表示后只有一位是1”吗?一个校验位检验出错,就可以知道出错的数据序号的一位是1。

9的二进制是1001,所以序号是1和8的校验位需要对其负责,上面说过了,由1和8来负责,本来就说明此数据序号(9)的二进制在第1位和第4位是1,所以一旦9号数据出错,所有负责9号的校验位都会检查出错误,即使用偶校验的校验位1和8会异或出1来,而其他校验位(序号2和4)都是0。
检验位1是“0001”,说明出错的数据第一位是1;检验位8是“1000”,说明出错的数据第4位是1;自然就能锁定出9来(1001)。

这一切看起来复杂的关系,究其根本就是这个机制:“先把所有位的序号转换成二进制表示,其中数据位的哪一位为1,就让哪一位为1的校验位负责检验”。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值