查找〜一个XOR B的最有效算法是什么? (注意〜是补码函数,通过将每1位反转为0并将每个0反转为1位,并且XOR是异或函数来完成)
例如,~4 XOR 6 = ~010 = 101 = 5和~6 XOR 9 = ~1111 = 0
答案 0 :(得分:4)
这是一个考虑到存储整数所需位数的答案:
def xnor(a, b):
length = max(a.bit_length(), b.bit_length())
return (~a ^ b) & ((1 << length) - 1)
然而,我无法想到这比仅仅~a ^ b
更好的情况。对于负面数字几乎肯定没有意义。
答案 1 :(得分:1)
这里唯一的问题是~
为正输入返回负数,并且您希望将正结果限制为输入中表示的有效位。
这是一个可以生成结果中需要的位掩码的函数:
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)
答案 2 :(得分:-1)
您只需使用==。
XNOR B与==运算符相同,因为:
A B NXOR
F F T
F T F
T F F
T T T