Reputation: 573
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 this function, continuously add one
00000 00000 00000 00000 00000 > 00000 00000 00000 00000 00001 > 00000 00000 00000 00000 >00010 > 00000 00000 00000 00000 000011 until it overflows?
I am thinking about two ways;
foo.to_ulong();
how to convert unsigned long back to bitset again? C++ documentation indicates it is possible, but in the library, I can only see bitset (unsigned long val), which is creating a new bitset
2. somehow bit operations, both got stuck, help needed
Upvotes: 1
Views: 347
Reputation: 31290
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.
Upvotes: 0
Reputation: 217065
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));
Upvotes: 1