如何使用xor计算奇偶校验

时间:2018-04-10 21:21:43

标签: bit-manipulation bit parity


说我们有这个号码101001110110010 这是使用XOR计算奇偶校验的正确方法:

10 10 01 11 01 10 01 0
1 1 1 0 1 1 1 0
0 1 0 1
1 1
0

2 个答案:

答案 0 :(得分:1)

作为逐个XORing每个位的替代方法,我们可以依靠计算机的能力将更大的整数XOR组合在一起。由两半H和L组成的大数的奇偶校验可以被计算为H^L的奇偶校验。该定义给出了一个(尾部)递归算法,该算法将每一步的数量减半,因此具有对数调用深度。它可以迭代实现,例如:

def parity(x):
    shiftamount = 1
    while x >> shiftamount:
        x ^= x >> shiftamount
        shiftamount <<= 1
    return x & 1

答案 1 :(得分:0)

我最后回答了自己的问题, 这个方法实际上是正确的,我在python中的线性密码分析实现中使用它。

基本上,要使用XOR计算一个数字的奇偶校验,只需取两个2位并将它们放在一起,继续这样做,直到你留下一个数字。

如果你需要它,这是实现

def FindParity(value):
    parity = 0
    while value > 0:
        extractedValue =  value % 2
        value //= 2
        parity = parity ^ extractedValue

    return parity

这个函数只需要一个数字,并在我的问题中手动完成我的工作。