Простой и быстрый способ - использовать целое число без знака в качестве «курсора» и сдвинуть его для перемещения курсора:
1000000000000000
0100000000000000
0010000000000000
0001000000000000
0000100000000000
0000010000000000
0000001000000000
0000000100000000
...
На каждой итерации используйте побитовое значение &
, чтобы увидеть, имеют ли число и курсор общие биты.
Простая реализация:
// number of bits in an unsigned int
#define BIT_COUNT (CHAR_BIT * sizeof(unsigned int))
void toBits(unsigned int n, int bits[BIT_COUNT])
{
unsigned int cursor = (unsigned int)1 << (BIT_COUNT - 1);
unsigned int i;
for (i = 0; i < BIT_COUNT; i++, cursor >>= 1)
out[i++] = (n & cursor) ? 1 : 0;
}