В языках 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 */
}
Надеюсь, этого достаточно, чтобы вы начали.