通过取消最右边的位来计算奇偶校验

时间:2014-03-31 19:41:58

标签: java python c binary parity

计算奇偶校验的第一种方法是对每个位进行xor运算。 - 这很容易理解。 对此的增强是丢弃较低位并保持反转奇偶校验直到数字变为0 即

While loop till number is greater than 0
1) parity = parity^1
2) number = number & (number-1)

这是如何工作的?我猜这个方法有点难以理解。

1 个答案:

答案 0 :(得分:5)

所以,一旦你看到number &= number - 1是什么,做这个问题是微不足道的。这是一个二进制示例:

first pass
1001001 - 1 = 1001000
1001001 & 1001000 = 1001000 

second pass
1001000 - 1 = 1000111
1001000 & 1000111 = 1000000

third pass
1000000 - 1 = 111111
1000000 & 111111 = 0

请注意,将数字转换为零所需的传递次数等于设置位数,因为每次传递都会删除一个设置位。奇偶校验是模2的集合位数(或和)。模2加法是xor运算,因此在算法中使用xor来查找奇偶校验。