如何迭代由给定掩码m
(权重为n
)定义的n
非连续位组成的2^n
值。
示例:16位变量,n=3
,m=0x0103
。生成的2^3=8
值应为:
(binary) (hex)
0000000000000000 0x0000
0000000000000001 0x0001
0000000000000010 0x0002
0000000000000011 0x0003
0000000100000000 0x0100
0000000100000001 0x0101
0000000100000010 0x0102
0000000100000011 0x0103
我相信这可以在c*2^n
操作中完成,对于较小的c
(1或2)。
诀窍在于如何从上一个值转换到下一个值。
mask = 0b0000000100000011
invmask = (~mask & (1 << 16) - 1)
curr = 0
for i in range(16):
print "{0:016b}".format(curr)
curr = ((curr | invmask) + 1) & mask
它给出:
0000000000000000
0000000000000001
0000000000000010
0000000000000011
0000000100000000
0000000100000001
0000000100000010
0000000100000011
0000000000000000
0000000000000001
0000000000000010
0000000000000011
0000000100000000
0000000100000001
0000000100000010
0000000100000011
谢谢你提出这个非常有趣的问题。