C中的位集,关于连续添加

我想在位集上添加1值,直到溢出为止,我想知道如何做到这一点,例如:

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

00000 00000 00000 00000 00000 > 00000 00000 00000 00000 00001 > 00000 00000 00000 00000 >00010 > 00000 00000 00000 00000 000011 until it overflows?

我正在考虑两种方法;

foo.to_ulong();

如何再次将unsigned long转换回bitset? C文档表明有可能,但是在库中,我只能看到正在创建新位集的位集(无符号long val).

2.
不知何故,一些操作都卡住了,需要帮助

解决方法:

您可以使用以下内容: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));
上一篇:C中的bitset大小是多少


下一篇:位运算