如果求出效验码?
开头就上公式,虽然不友好,可这个公式是必须要你知道的。
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咯
首先必须算出效验码的个数
k代表的是效验码的个数,取效验码,必须知道这个效验码是多少位吧。
当 k=3
时,公式就这样
明显
k=3
不成立,那么
k=4
呢?
当
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 |