我想为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。 不知怎的位操作,都被卡住,需要帮助
答案 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];
}
}