У меня есть бит C++ заданной длины. Я хочу сгенерировать все возможные комбинации этого битового набора, для которого я думал добавить 1 2^bitset.length раз. Как это сделать? Также рекомендуется решение библиотеки Boostдобавить 1 в C++ битсет
ответ
Все возможные комбинации? Просто используйте 64-битное целое число без знака и упростите свою жизнь.
Тогда мне придется преобразовать это целое число в биты снова и снова, чтобы извлекать значения отдельных бит. Поскольку бит-бит <некоторый размер переменной> невозможен в битах STL, я буду использовать boost. И если я сделаю битсет < value > mybitset, а значение = 2, мне понадобится 00010 вместо 10. Возможно ли это? Надеюсь, это имеет смысл для вас :) – wirate
Нет, вам не придется преобразовывать его обратно в битрейт для извлечения отдельных битов - узнайте, как использовать побитовые операторы. 00010 - это то же самое, что и 10; это зависит только от вас, сколько ведущих нулей целого числа вы хотите извлечь. – zvrba
Вы имеете в виду, что я вижу, установлен ли третий бит int или нет? Пожалуйста, укажите мне где-нибудь! – wirate
Попробуйте это:
/*
* 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;
}
}
}
+1 v.useful - ty – kfmfe04
Использование библиотеки наддува, вы можете попробовать следующее:
Например, BitSet длиной 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;
}
хорошо ... Я не мог см. операцию добавления, и ручная проверка всех битов не представляется возможной. Поэтому я ничего не пробовал – wirate