突然忘了这个概念,备注一下

设:
数据有 m(message)位,校验码有 p(parity)位
则:校验码一共有 2^p 种取值;(每一位表示一个1或0,所以就是 2^p)
如果想通过校验码指出任一位上发生的错误必须满足:
2^p - 1 ≥ m + p
这里减一是为了减去正确的值

在上面的变量中,已知的是 m,因为你接受数据一定知道数据的长度

设 m = 4,通过计算不等式得到 p ≥ 3,设 p = 3,且为 p1,p2,p3

规定海明码放到 2^n(n = 0、1、2......)位置上。如下

1(001)2(010)3(011)4(100)5(101)6(110)7(111)
2^02^1 2^2
p1p2m1p3m2m3m4

其中

海明码对应位 1对应位 2对应位 3说明
p1(001)3(011)5(101)7(111)p1 是 2^0,也就是 001 ,表示校验第一位为 1 的 m
p2(010)3(011)6(110)7(111)p2 是 2^1,也就是 010 ,表示校验第二位为 1 的 m
p3(100)5(101)6(110)7(111)p3 是 2^2,也就是 100 ,表示校验第三位为 1 的 m

设传输的信息m 是 1010,则 m3 =1,m5 = 0,m6 = 1,m7 = 0,按照上面所说如下

海明码值
p1 = 0(奇),1(偶)100
p2 = 1(奇),0(偶)110
p3 = 0(奇),1(偶)010

注意是奇校验码还是偶校验码