Здесь много неправильного, например, присвоение во время выполнения массива.
Чтобы сохранить отдельные биты 32-битного целого в элементах массива, вы можете использовать что-то следующее.
//assumes bits has been declared as unsignef char bits[32]
void get_bits32(unsigned char * bits, unsigned int x) {
for(int i = 0; i < 32; i++)
bits[i] = (x >> i) & 1u;
}
Вы можете изменить это, чтобы указать количество битов или длину массива следующим образом.
void get_bits32(unsigned char * bits, int n, unsigned int x) {
for(int i = 0; i < n; i++)
bits[i] = (x >> i) & 1u;
}
Здесь используется массив символов, так как вы ожидаете только 0 или 1 с.
Эта версия хранит младший значащий бит в позиции 0 массива.
Чтобы напечатать это, вы должны напечатать каждый элемент массива, например
for(int i = 0; i < n; i++)
printf("%d", bits[i]);