如何遍历2^n
值,这些值由给定掩码n
(汉明重量m
)定义的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)。
答案 0 :(得分: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
感谢您提出这个非常有趣的问题。