微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决python中整数与任意位的奇偶校验

很多解决方案建议使用右移的xor,如此处所述 https://www.geeksforgeeks.org/finding-the-parity-of-a-number-efficiently/

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)

关于如何使用xor和任意数量的右移来计算奇偶校验的任何建议?

解决方法

您可以使用循环来动态更改奇偶校验的长度:

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这么多的操作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。