我具有接收的整数,并且返回一组,它由2的幂,和其等于输入值的一个函数:在若干循环向后通过最高阶位
def bin_set(n):
b = set()
while n:
hbit = 1 << n.bit_length()-1
b.add(hbit)
n -= hbit
return b
所以我计算将该数字的最高位添加到该集合中,但我应该将哪个值发送给循环的下一个迭代?我使用n = n-hbit
是因为while
的情况,它以某种方式起作用,但我确信这是一种错误的方法。
是否有不同的方式来做到这一点,也许有不同的循环,没有对数/位twiddling/bit_length(),或者这是唯一的方法吗?
谢谢,使用异或来解除位的想法在我看来并没有发生,我更喜欢它!我实际上测试了第二个循环,在我看来,总是至少有一个迭代涉及到,尽管我想不出一个好的最坏情况。 – cbq 2014-12-03 14:03:46
@cbq:最差情况:一个非常大的整数,所有的位都被设置。例如,“19342813113834066795298815”。 – 2014-12-03 15:40:37