各位大大好。后正在使用C开发一个算法。
后目前面临的问题是,
how to enumerate all k-bit combinations for a given mask.
比如说。我有一个mask。1100101。当k=2时。
我想要有效率的例举所有含有2个1的组合。如下。
0000101
0100001
1000001
0100100
1000100
1100000
我目前是用下面的code 产生出所有的sub-mask,但然跳掉k!=2的case。
for(unsigned sub_mask = (mask - 1) & mask; sub_mask;
sub_mask = (sub_mask - 1) & mask) {
if(__builtin_popcount(sub_mask) != k ) //k=2
continue;
...
}
请问有办法只iterate k=2的case吗?