Цель этого упражнения - напечатать двоичное представление числа.
Учитывая следующий код, я получаю 00000000000000000000000000000021 вместо ожидаемого 00000000000000000000000000000011, когда я запускаю print_binary (3).
Я думаю, что мне здесь чего-то не хватает.Может кто-нибудь объяснить, почему я получил такой неожиданный результат?
Я использую gcc версии 6.3.0 20170516 (Debian 6.3.0-18 + deb9u1).Чтобы проверить эту программу.
#include <stdio.h>
#include <stdbool.h>
#include <limits.h>
#define INT_BITS sizeof(int) * 8
unsigned int check_bit(unsigned int bit, unsigned int n) {
unsigned int mask = (1 << bit);
return n & mask;
}
void print_binary(unsigned int num) {
int bits[INT_BITS];
for (int i = INT_BITS - 1; i >= 0; i--) {
printf("%u", check_bit(i, num));
}
printf("\n");
}