C ++中的Bitset,关于不断添加

时间:2014-04-12 06:57:45

标签: c++ bitset

我想为bitset添加1个值,直到它流过,我想知道如何执行此操作,如:

位集< 20 - ; FOO; (foo = 00000 00000 00000 00000) 我们如何实现这个功能,不断添加一个

  <00> 00000 00000 00000 00000 00000> 00000 00000 00000 00000 00001> 00000 00000 00000 00000&gt; 00010&gt; 00000 00000 00000 00000 000011直到它溢出?

我正在考虑两种方式;

foo.to_ulong();

如何将unsigned long转换回bitset? C ++文档表明它是可能的,但在库中,我只能看到bitset(unsigned long val),这是创建一个新的bitset

2。 不知怎的位操作,都被卡住,需要帮助

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:http://ideone.com/C8O8Qe

template <std::size_t N>
bool increase(std::bitset<N>& bs)
{
    for (std::size_t i = 0; i != bs.size(); ++i) {
        if (bs.flip(i).test(i) == true) {
            return true;
        }
    }
    return false; // overflow
}

然后迭代所有值:

std::bitset<20> bs;

do {
    std::cout << bs << std::endl;
} while (increase(bs));

答案 1 :(得分:0)

以下代码可以帮助您:

bitset<20> b;

bool overflow = false;
while( ! overflow ){
    cout << b << endl; // prints bits in reversed order
    int ipos = b.size();
    overflow = true;
    while( overflow && --ipos >= 0 ){ 
        overflow = b[ipos];
        b[ipos] = ! b[ipos];
    }
}
测试@ Jarod42,谢谢。