如何用一个0,两个0迭代所有位串,一直到n 0?

时间:2012-02-16 22:09:36

标签: c++ boost bit-manipulation boost-dynamic-bitset

我有一个函数来增加一个位串,如下所示:

void increment(boost::dynamic_bitset<> &bitset)
{   
    for (int loop = 0; loop < bitset.size(); ++loop)
    {
        if ((bitset[loop] ^= 0x1) == 0x1)
        {
            break;
        }
    }
}

我想要一个以调用increment的方式调用的函数,但是以不同方式修改bitstring。每次调用它时,我都想获得与前一个相同数量的0的下一个位串。

例如,如果bitstring的长度为10,则对此函数的前10次调用将给出一个带有单个0的位串。然后,调用11到20将返回带有2 0的位串。我希望这一直一直向下,直到bitstring为全0。

我怎样才能设置这样的功能?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以在Matters Computational,第1.24.3章“班次顺序”中找到答案。您必须将整数更改为位集并翻转值。当与位集一起使用时,这种实现可能不是最佳的。