Перебор всех возможных битовых перестановок

Скажем, я хочу перебрать все битовые последовательности (из-за отсутствия лучшего имени) в диапазоне 00001111, Когда я хочу увеличить его до 24 бит, я не смогу просто заранее вычислить все возможные перестановки; Мне нужно вычислить их на лету.

Как я могу генерировать перестановки на лету (как генераторы Python с yield) используя что-то вроде InputIterator или украшенная в то время петля?

0

Решение

Если я не неправильно понимаю, вы можете использовать int (который в любом случае хранится в виде битов в его ядре), просто ограничить ваш цикл только для итерации до самого широкого int, который допускает пространство (в нашем случае 24 бита). Начиная с 0 и добавляя последовательные, неявно будут проходить все возможные битовые комбинации.

Не нужно ничего предварительно вычислять или хранить. Вот 4-битный пример:

for(unsigned long int cnt = 0; cnt < 16; cnt++) DoSomething(cnt);

В этом случае DoSomething (const unsigned long int&) может просто отобразить биты и выполнить действие, которое вы ищете.

Если ваша реализация поддерживает это, используйте тип uint_32t для явной и точной ширины.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]