计算机基础之最简单的海明校验码(六)

如果求出效验码?

2 k m + k + 1

开头就上公式,虽然不友好,可这个公式是必须要你知道的。 m是二进制的长度。

举个栗子

假设有: 0 1 1 0 1 0 1 0 二进制数。我们来数数有多少个哈。

1 2 3 4 5 6 7 8
0 1 1 0 1 0 1 0

有8位,那么m就等于8咯

2 k 8 + k + 1

首先必须算出效验码的个数

k代表的是效验码的个数,取效验码,必须知道这个效验码是多少位吧。
k=3时,公式就这样

2 3 8 + 3 + 1

明显 k=3不成立,那么 k=4呢?
2 4 8 + 3 + 1

k=4时,成立。那么我就确定 效验码的个数为4

效验码的正确存放姿势:

海明校验码是放在2的幂次位上的,如 1,2,4,8,16….等

求出效验码

  • 原码: 0 1 1 0 1 0 1 0 共8位
  • 效验码:占4位

所以加上效验码的话,一共12位,而校验码放的位置是2的幂次位上,所以4位效验码分别在1、2、4、8的位置上,如下表:

1 2 3 4 5 6 7 8 9 10 11 12
? ? 0 ? 1 1 0 ? 1 0 1 0

然后他们所对应位置的 二进制如下图:

扫描二维码关注公众号,回复: 1761867 查看本文章
位置 二进制显示
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
10 1010
11 1011
12 1100

如上表所见,1的位置正好是效验码的其中一位,那么他所对应的二进制为:0001,查找该二进制对应1的相同的有: 3,5,7,9,11

那么第1个位置的效验码为:
3对应:0、5对应:1、7对应:0、9对应:1、11对应:0,他们异或出来的值就是第一个?的值。

0⊕1⊕0⊕1⊕1   =1
1 2 3 4 5 6 7 8 9 10 11 12
1 ? 0 ? 1 1 0 ? 1 0 1 0

还有3个效验码就交给你们了。

全部求出后答案应该为:1101,最后的表格为:

1 2 3 4 5 6 7 8 9 10 11 12
1 1 0 0 1 1 0 1 1 0 1 0

猜你喜欢

转载自blog.csdn.net/qq_31403321/article/details/80527954