今天做奇偶校验的时候发现对为什么使用归约异或讲的人很少。所以想把我的想法简单记录一下。
异或简而言之相同为0不同为1。所以显然可以推出一下几个结论:
1,只有0和1相异或结果才会为1
2,一串0做归约异或结果为0
3,两个1做异或结果为0
4,数据的0和1调换位置不影响最终的结果
所以针对一个二进制数做归约异或的时候可以把0当作两个1,再把相邻的两个1当作0。显然当1的个数为奇数个时,最后替换完前面都是0末尾为1,归约异或结果为1。当1的个数为偶数个时,替换为全0,归约异或结果为0。
eg1. 10101 ====> 1_11_1_11_1 ====> 11_11_11_1 ====> 0001 ---------1
eg2. 10010 ====> 1_11_11_1_11 ====> 11_11_11_11 ====> 0000 -------0
或者根据结论4先调换位置再把两个1替换为0更好理解一点
eg1. 10101 ====> 00111 ====> 0_0_11_1 ====> 0001 ---------1
eg2. 10010 ====> 00011 ====> 0_0_0_11 ====> 0000 ---------0
综上所述,归约异或的结果跟数据中包含的1的个数有关,当1是偶数个时结果为0,1是奇数个时结果为1。这与奇偶校验的需求一样。