Bitset in C++, about continuously add

戏子无情 提交于 2019-12-02 07:17:45

You may use the following: 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
}

And then to iterate on all values :

std::bitset<20> bs;

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

The following code should help you:

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];
    }
}

tested by @Jarod42, thanks.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!