Bitset in C++, about continuously add

前端 未结 2 450
鱼传尺愫
鱼传尺愫 2021-01-24 16:02

I want to add 1 value to the bitset until it over flows, I am wondering how to do this, like:

bitset<20> foo; (foo=00000 00000 00000 00000) how can we implement thi

相关标签:
2条回答
  • 2021-01-24 16:27

    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));
    
    0 讨论(0)
  • 2021-01-24 16:30

    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.

    0 讨论(0)
提交回复
热议问题