首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异或的补码

异或的补码
EN

Stack Overflow用户
提问于 2014-07-16 05:58:27
回答 3查看 956关注 0票数 0

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

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

EN

回答 3

Stack Overflow用户

发布于 2014-07-16 06:21:55

这是一个考虑到存储整数所需的位数的答案:

代码语言:javascript
复制
def xnor(a, b):
    length = max(a.bit_length(), b.bit_length())
    return (~a ^ b) & ((1 << length) - 1)

然而,我想不出比~a ^ b更好的情况了。几乎可以肯定的是,对于负数来说,这是没有意义的。

票数 4
EN

Stack Overflow用户

发布于 2014-07-16 06:29:20

这里唯一的问题是,对于正输入,~返回一个负数,而您希望将正结果限制为输入中表示的有效位。

下面是一个函数,它可以生成结果中需要的位的掩码:

代码语言:javascript
复制
def mask(n):
    n = abs(n)
    shift = 1
    while n & (n + 1) != 0:
        n |= n >> shift
        shift *= 2
    return n

下面是如何使用它:

代码语言:javascript
复制
print (~a ^ b) & mask(a | b)
票数 1
EN

Stack Overflow用户

发布于 2014-07-16 06:06:31

您可以简单地使用==。

XNOR B与==运算符相同,因为:

A B NXOR

F F T

F T F

T F F F

T T T

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24768900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档