【发布时间】:2018-09-10 13:11:52
【问题描述】:
假设我有一个非常大的 python 整数,在 python 2.7 中(但如果需要,我不介意切换到 python 3)。
比说的更大,2^100000。
找到二进制序列中所有 1 的位置的最快方法是什么? (例如:24 将是 11000 ---> = [4,5](或 [5,4].. 我不在乎顺序)
目前我正在使用:
sum = whatever_starting_number
while 1:
val = sum.bit_length()-1
sum -= 2**val
mylist.append(val)
if sum == 0:
break
这没关系,但它几乎不比只取 log2 并反复减去它快。我真正想做的只是看位,跳过零,记录1的位置,甚至不需要修改原始值。
edit:得到多个答案,非常感谢。我将在几个 timeit 测试中实现它们,并将在明天更新结果。
【问题讨论】:
-
你不应该使用
sum作为变量名,因为它是 Python 中内置函数的名称
标签: python binary bit-manipulation bitwise-operators