有没有 XOR 位减少操作符或函数?

2 投票
5 回答
5254 浏览
提问于 2025-04-17 02:32

在Python里有没有什么可以用来做XOR位运算的简化操作符或者函数?我自己写这个没问题,但如果Python已经内置了这个功能,那就没必要在每个脚本里都写一遍了。

r=x&1
for i in xrange(1,63):
    r=r^((x>>i)&1)

5 个回答

1

如果你不介意使用外部模块,可以使用 bitstringcount() 方法

如果你只是想要一个简洁的 Python 表达式,可以试试

r = sum(map(int, format(x, "b"))) & 1
2

基本上,这个问题就像是在问数字x里面1的个数是偶数还是奇数,这其实就是在问x的奇偶性。

你提供的解决方案确实是个简单的方法,但和其他方法比起来效率非常低下。这里有一个网站,里面有一些很棒的解决方案,适用于这个问题和其他与位操作相关的问题:位操作技巧
网站上的解决方案是用C语言写的,不过把它们“翻译”成Python应该不难。

3

这段话虽然没有直接回答你的问题,但它提到的代码和下面这段代码是一样的:

def parity(x):
    k = 0
    d = x
    while d != 0:
        k = k + 1
        d = d & (d - 1)
    return k % 2

这样做的好处是,它不依赖于数字的位数;而且速度更快(比如在计算2**62时,你的代码需要46.6微秒,而这段代码只需要3.02微秒),因为循环的次数是根据数字中1的个数(也就是所谓的“人口计数”)来决定的,而不是根据位数。

撰写回答