异或与奇偶校验
约 10 分钟
异或:最有个性的门
第一章提过异或:两个输入不同才出 1。它其实是「二进制加法不管进位」的那一位,也是逻辑门里最会「找不同」的一个。把异或反过来叫同或——相同才出 1,天然就是一位「相等比较器」。一串异或门还能把多个 bit 揉成一个:偶数个 1 出 0,奇数个 1 出 1。
奇偶校验:给数据加个哨兵
数据在电线里跑,可能被干扰翻错一位。怎么办?发送前数一下 1 的个数,额外添一位「校验位」,凑成偶数(这叫偶校验)。接收方重新数一遍:如果 1 的个数变成奇数,说明路上出了错,要求重发。用式子说,校验位 P = D0⊕D1⊕…⊕D7,接收端再异或一遍全体,结果不为 0 就报警。早年的串口通信和内存条都靠它把关。
一个位与一群位
奇偶校验便宜但能力有限:错两位它就「看不出来了」(两个错误互相抵消)。于是人们发明了能纠错的海明码——用好几组校验位互相印证,不仅能发现还能定位是哪一位错了。服务器内存用的 ECC 就是这类思路的后代。
常见误区:校验位不是「加密」。它不保密,只负责发现传输中的意外翻转。
练一练:数据 1011 采用偶校验,校验位应该添 0 还是 1?添完后如果某一位被干扰翻转,接收端怎么发现?
小纸条
给数据 1100 加偶校验位,并说明接收端怎么查错。
登录 后可看答案