python 中任意位整数的奇偶校验
Parity of integer with arbitrary bits in python
很多解决方案建议使用带右移的异或,如此处所述
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)
关于如何使用异或和右移计算任意位数的奇偶校验有什么建议吗?
您可以使用循环来动态更改奇偶校验的长度:
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
那么多操作。
很多解决方案建议使用带右移的异或,如此处所述 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)
关于如何使用异或和右移计算任意位数的奇偶校验有什么建议吗?
您可以使用循环来动态更改奇偶校验的长度:
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
那么多操作。