有没有 XOR 位减少操作符或函数?
在Python里有没有什么可以用来做XOR位运算的简化操作符或者函数?我自己写这个没问题,但如果Python已经内置了这个功能,那就没必要在每个脚本里都写一遍了。
r=x&1
for i in xrange(1,63):
r=r^((x>>i)&1)
5 个回答
1
如果你不介意使用外部模块,可以使用 bitstring
的 count()
方法。
如果你只是想要一个简洁的 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的个数(也就是所谓的“人口计数”)来决定的,而不是根据位数。