- 原理自行参考百度
- 所需知识点:异或、
异或相同为0,不同为1,异或的符号为“xor”或者“⊕”,
例如:1 xor 1 = 0,1 xor 0 = 1 基本公式(n为信息位, k为校验位)
这里写代码片
举例说明
A. 求(1101)2 的海明码
(1) 首先求出检验的位数n = 4 k = 3
(2) 校验位的位置2k 即, 1,2,4 … …
(3) 信息位(D0 D1 D2 D3)与校验位(K1k2k3)
位置 H1 H2 H3 H4 H5 H6 H7
信息位 D0 D1 D2 D3
检验位 K1 K2 K3
检验位值 1 2 4
位置 占用检验位 备注
H1 K1 1=1
H2 K2 2=2
H3 K2, K1 3=2+1
H4 K3 4=4
H5 K3, K1 5=4+1
H6 K3,K2 6=4+2
H7 K3,K2,K1 7=4+2+1
(4) 确定检验位
规则:待校验位(H)等于检验位所有位置的加和H3 = K2 + K1 H5 = K3 + K1 H6 = K3 + H2 H7 = K3 + K2 + K1
(5) 确定每个松位都检验了哪些数据
K1: [ H1, H3, H5, H7] K1 = H3 xor H5 xor H7 = 1 xor 1 xor 1 = 1
K2: [ H2, H3, H6, H7] K2 = H3 xor H6 xor H7 = 1 xor 0 xor 1 = 0
K3: [ H4, H5, H6, H7] K3 = H5 xor H6 xor H7 = 1 xor 1 xor 1 = 0
位置 H1 H2 H3 H4 H5 H6 H7
信息位 D0 D1 D2 D3
检验位 K1 K2 K3
检验位值 1 2 4
海明码值 1 0 1 0 1 0 1