Определение 1-битного большого битового поля довольно бессмысленно и плохо определяется стандартом. Большинство аспектов битовых полей не указаны, включая то, должно ли битовое поле int
считаться подписанным или неподписанным. Лучший совет - избегать битовых полей на 100%, особенно при работе с отображением двоичной памяти.
Примечательно, что вы на самом деле ничего не конвертируете - вы просто копируете 32-битное целое число бит за битом, где вы могли бы скопировать все 32 бита за раз. Поскольку все данные в вашей программе уже находятся в двоичном виде, нет необходимости что-либо преобразовывать. Просто настройте процедуру печати:
uint32_t dec = 0xDEADBEEF;
const size_t bits = 8*sizeof(dec);
for(size_t i=0; i<bits; i++)
{
uint32_t mask = (1u << (bits-i-1)); // mask from MSB to LSB
printf("%d", (_Bool)(dec & mask)); // convert zero/non-zero value into 0 or 1
}
Выход:
11011110101011011011111011101111