Вы можете обратить биты так, как вы выводите их, и вместо этого сохранить их в другом целом числе, и сделать это снова:
for (i = 0; i < (sizeof(unsigned int) * CHAR_BIT); i++)
{
new_int |= (original_int & 1);
original_int = original_int >> 1;
new_int = new_int << 1;
}
Или вы можете просто сделать наоборот, сдвинув маску:
unsigned int mask = 1 << ((sizeof(unsigned int) * CHAR_BIT) - 1);
while (mask > 0)
{
bit = original_int & mask;
mask = mask >> 1;
printf("%d", (bit > 0));
}
Если вы хотите удалить начальные 0, вы можете подождать, пока напечатается 1, или выполнить предварительный просмотр:
unsigned int mask = 1 << ((sizeof(unsigned int) * CHAR_BIT) - 1);
while ((mask > 0) && ((original_int & mask) == 0))
mask = mask >> 1;
do
{
bit = original_int & mask;
mask = mask >> 1;
printf("%d", (bit > 0));
} while (mask > 0);
таким образом вы поместите маску на первую напечатанную 1 и забудете о первых 0
Но помните: вывести двоичное значение целого числа можно только с помощью printf