Итерация по двоичной последовательности с некоторыми битами, привязанными к 1 - PullRequest
2 голосов
/ 16 июня 2011

Скажем, у меня есть двоичное число 01100 = 12, как эффективен способ повторения, начиная с этого числа, чтобы биты, уже установленные в единицу, оставались установленными?

В этом примере последовательность будет идти

01100 = 12
01101 = 13
01110 = 14
01111 = 15
11100 = 28
11101 = 29
11110 = 30
11111 = 31

Ответы [ 3 ]

4 голосов
/ 16 июня 2011

Сохранить исходное значение.Затем каждый раз, когда вы увеличиваете динамическое значение, или оно с оригиналом.В Java:

int orig = val;
while (true) {
    System.out.println(val);
    val = (val+1) | orig;
}
4 голосов
/ 16 июня 2011

Если вы просто увеличиваете и просматриваете двоичный файл, всякий раз, когда очищается блок из 1 с, он также будет увеличивать 0 после конца этого блока.Таким образом, вы можете просто считать и снова устанавливать биты на каждой итерации:

const unsigned n = 12;
unsigned i = n;

while (1) {
    // print i (or whatever)
    i = (i + 1) | n;
}
0 голосов
/ 16 июня 2011
int origin = 12;
for (int i = 0; i < n; i++) {
    if ((origin & i) != origin)
        continue;
    do_something(i);
}
...