我有一个给定长度的 c++ 位集。我想生成此位集的所有可能组合,我想为其添加 1 2^bitset.length 次。这该怎么做?Boost库解决方案也是可以接受的
问问题
3810 次
4 回答
5
试试这个:
/*
* This function adds 1 to the bitset.
*
* Since the bitset does not natively support addition we do it manually.
* If XOR a bit with 1 leaves it as one then we did not overflow so we can break out
* otherwise the bit is zero meaning it was previously one which means we have a bit
* overflow which must be added 1 to the next bit etc.
*/
void increment(boost::dynamic_bitset<>& bitset)
{
for(int loop = 0;loop < bitset.count(); ++loop)
{
if ((bitset[loop] ^= 0x1) == 0x1)
{ break;
}
}
}
于 2012-04-28T12:41:32.917 回答
3
所有可能的组合?只需使用 64 位无符号整数,让您的生活更轻松。
于 2012-04-28T11:25:22.827 回答
0
使用 boost 库,您可以尝试以下操作:
例如,长度为 4 的位集
boost::dynamic_bitset<> bitset;
for (int i = 0; i < pow(2.0, 4); i++) {
bitset = boost::dynamic_bitset<>(4, i);
std::cout << bitset << std::endl;
}
于 2017-12-26T14:39:33.130 回答
0
不是最好的,而是蛮力的方式,但你可以通过使用转换来添加 1to_ulong()
bitset<32> b (13);
b = b.to_ulong() + 1;
于 2022-02-12T19:03:17.037 回答