寻找~A XOR B最有效的算法是什么?(请注意,~是补码函数,通过将每个1位反转为0并将每个0反转为1位来完成,XOR是异或函数)
例如,~4 XOR 6= ~010 = 101 =5 and ~6 XOR 9= ~1111 =0
发布于 2014-07-16 06:21:55
这是一个考虑到存储整数所需的位数的答案:
def xnor(a, b):
length = max(a.bit_length(), b.bit_length())
return (~a ^ b) & ((1 << length) - 1)然而,我想不出比~a ^ b更好的情况了。几乎可以肯定的是,对于负数来说,这是没有意义的。
发布于 2014-07-16 06:29:20
这里唯一的问题是,对于正输入,~返回一个负数,而您希望将正结果限制为输入中表示的有效位。
下面是一个函数,它可以生成结果中需要的位的掩码:
def mask(n):
n = abs(n)
shift = 1
while n & (n + 1) != 0:
n |= n >> shift
shift *= 2
return n下面是如何使用它:
print (~a ^ b) & mask(a | b)发布于 2014-07-16 06:06:31
您可以简单地使用==。
XNOR B与==运算符相同,因为:
A B NXOR
F F T
F T F
T F F F
T T T
https://stackoverflow.com/questions/24768900
复制相似问题