异或的补充

时间:2014-07-15 21:58:27

标签: python bit-manipulation xor

查找〜一个XOR B的最有效算法是什么? (注意〜是补码函数,通过将每1位反转为0并将每个0反转为1位,并且XOR是异或函数来完成)

例如,~4 XOR 6 = ~010 = 101 = 5和~6 XOR 9 = ~1111 = 0

3 个答案:

答案 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