猿问

python中整数与任意位的奇偶校验

许多解决方案建议使用右移异或,如此处所述 

def findParity(x):

    x = x ^ (x >> 16); 

    x = x ^ (x >> 8); 

    x = x ^ (x >> 4);

    x = x ^ (x >> 2); 

    x = x ^ (x >> 1); 

    return x & 1; 

但他们假设 32 或 64 位或某个 2^n 位整数。在 python 中,整数可以有任意位数。例如 i = 7,只有 3 位。


i = 7

print(len(bin(i)) - 2)

关于如何使用异或和右移计算任意位数的奇偶校验有什么建议吗?


蓝山帝景
浏览 218回答 1
1回答

偶然的你

您可以使用循环来动态更改奇偶校验的长度:def parity(num):    length = math.ceil(math.log2(math.ceil(math.log2(num)+1)))    for i in range(length-1, -1, -1):        print(2**i)        num^=(num >> (2**i))    return num&1您将需要使用log两次,因为您首先必须找到数字的长度,然后您需要log那么多操作。
随时随地看视频慕课网APP

相关分类

Python
我要回答