奇偶校验位是一种简单的错误检测码。
分为偶检验位和奇校验位两种。对于偶校验位来说,如果 01 序列中的 1 的个数是奇数,那么校验位是 1,使得添加校验位后的 1 的个数是偶数,否则校验位是 0;奇校验位刚好相反。
从定义来说,可以看到,奇偶校验仅能检测奇数个位数发生反转的错误,不能检测偶数个位发生反转的情况,也不能确定哪些位发生了反转,故不能纠错。
校验位的生成
对于 01 序列 AnAn-1…A1,其偶检验位是 (An + An-1 + … + A1) mod 2,奇校验位是 (An + An-1 + … + A1 + 1) mod 2。
01 序列的求和模 2 可以用异或来实现。
把 01 序列重新排列成 m 个连续的 1 和 n 个连续的 0。记 m 个 1 的异或为 p,n 个 0 的异或为 q。其中 q 不乱 n 是奇偶都会是 0,而 m 是奇数时,p 将是 1,m 是偶数时,p 将是 0。
有以下表格:
m | n | m mod 2 | p | q | p^q |
---|---|---|---|---|---|
奇 | 奇 | 1 | 1 | 0 | 1 |
奇 | 偶 | 1 | 1 | 0 | 1 |
偶 | 奇 | 0 | 0 | 0 | 0 |
偶 | 偶 | 0 | 0 | 0 | 0 |
可见,各位求和后模 2 即是各位做异或。
异或(XOR)
符号是 ⊕,下面用编程语言中的 ^ 来表示
异或满足交换率、结合律。
- a^a = 0
- a^0 = a
- a^b = b^a
- a^b^c = a^(b^c) = (a^b)^c
- c = a^b => a = b^c => c = b^a
- a^b^a = b