2012-04-28 2 views
2

У меня есть бит C++ заданной длины. Я хочу сгенерировать все возможные комбинации этого битового набора, для которого я думал добавить 1 2^bitset.length раз. Как это сделать? Также рекомендуется решение библиотеки Boostдобавить 1 в C++ битсет

+1

хорошо ... Я не мог см. операцию добавления, и ручная проверка всех битов не представляется возможной. Поэтому я ничего не пробовал – wirate

ответ

2

Все возможные комбинации? Просто используйте 64-битное целое число без знака и упростите свою жизнь.

+0

Тогда мне придется преобразовать это целое число в биты снова и снова, чтобы извлекать значения отдельных бит. Поскольку бит-бит <некоторый размер переменной> невозможен в битах STL, я буду использовать boost. И если я сделаю битсет < value > mybitset, а значение = 2, мне понадобится 00010 вместо 10. Возможно ли это? Надеюсь, это имеет смысл для вас :) – wirate

+1

Нет, вам не придется преобразовывать его обратно в битрейт для извлечения отдельных битов - узнайте, как использовать побитовые операторы. 00010 - это то же самое, что и 10; это зависит только от вас, сколько ведущих нулей целого числа вы хотите извлечь. – zvrba

+0

Вы имеете в виду, что я вижу, установлен ли третий бит int или нет? Пожалуйста, укажите мне где-нибудь! – wirate

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; 
     } 
    } 
} 
+0

+1 v.useful - ty – kfmfe04

0

Использование библиотеки наддува, вы можете попробовать следующее:

Например, 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; 

}