В языках C, C++ и аналогично-синтаксиса вы можете определить, является ли самый правый бит в целочисленном i
1 или 0 путем проверки того, является ли i & 1
ненулевым или нулевым. (Обратите внимание, что это один из &
, обозначающий побитовое И-операцию, а не &&
, обозначающую логический И). Для второго-к-правого бита вы проверяете i & 2
; для третьего вы проверяете i & 4
и т. д. силами двух.
В более общем плане, чтобы определить, равен ли бит j
th справа, вы можете проверить, есть ли i & (1 << (j-1)) != 0
. <<
указывает на сдвиг влево; 1 << (j-1)
по существу эквивалентен 2 j-1.
Таким образом, для 32-разрядного целого числа, ваш цикл будет выглядеть примерно так:
unsigned int i = 26; /* Replace this with however it's actually defined. */
int j;
for (j = 31; j >= 0; j--)
{
if ((i & (1 << (j-1))) != 0)
/* do something for jth bit is 1 */
else
/* do something for jth bit is 0 */
}
Будем надеяться, что это достаточно, чтобы вы начали.
http://stackoverflow.com/questions/224799/bitwise-flags-abandoned – 2010-12-16 21:23:07