C++ 按位计数递增顺序迭代整数的每个位掩码

C++ 按位计数递增顺序迭代整数的每个位掩码,c++,algorithm,bit-manipulation,bit,C++,Algorithm,Bit Manipulation,Bit,以位计数递增顺序迭代整数的所有位掩码的最有效方法是什么 首先,我只需要迭代一位掩码: 0001 0010 0100 1000 然后通过两位掩码: 0011 0101 1001 0110 1010 1100 依此类推。这里有一个尝试,它使用递归并对所有8位数字的1到8位掩码进行迭代 void generate(int numbits, int acc) { if (numbits <= 0) { cout << "0x" << hex <

以位计数递增顺序迭代整数的所有位掩码的最有效方法是什么

首先,我只需要迭代一位掩码:

0001 0010 0100 1000

然后通过两位掩码:

0011 0101 1001 0110 1010 1100


依此类推。

这里有一个尝试,它使用递归并对所有8位数字的1到8位掩码进行迭代

void generate(int numbits, int acc)
{
    if (numbits <= 0) {
        cout << "0x" << hex << acc << endl;
        return;
    }
    for (int bit = 0; bit < 8; ++bit) {
        if (acc < (1 << bit)) {
            generate(numbits - 1, acc | (1 << bit));
        }
    }
}

int main()
{
    for (int numbits = 1; numbits <= 8; ++numbits) {
        cout << "number of bits: " << dec << numbits << endl;
        generate(numbits, 0);
    }
}

我不太明白。“遍历整数的所有位掩码”意味着什么?你能给出一个完整的解释吗,可能只有几位的整数。可能我解释得不好,我需要对(int I=1…)进行循环,在这里我按照我上面描述的顺序取值。你真的需要先把所有的一位掩码都取出来吗,等等,或者你能更一般地迭代,计算一位的数量,并据此进行处理?@AdiLevin他想迭代所有整数,但按非零位的数量排序。哦。明白了:-)谢谢
number of bits: 1
0x1
0x2
0x4
0x8
0x10
0x20
0x40
0x80
number of bits: 2
0x3
0x5
0x9
0x11
0x21
0x41
0x81
0x6
...
number of bits: 7
0x7f
0xbf
0xdf
0xef
0xf7
0xfb
0xfd
0xfe
number of bits: 8
0xff