Вы также можете просто вывести отдельные символы с помощью putchar()
, не нужно вызывать переменную c printf
для вывода фиксированного символа в строке формата (хотя хороший компилятор, скорее всего, сделает оптимизацию за вас.
Вы можете сделать что-то похожее на:
#include <stdio.h>
#include <limits.h>
int main (void) {
unsigned n;
fputs ("enter an integer number: ", stdout);
if (scanf ("%u", &n) == 1) {
for (unsigned i = 0; i < n; i++) {
printf ("%d == ", i);
for (unsigned s = 0; s < sizeof s * CHAR_BIT; s++)
putchar ((i >> (31 - s)) & 1u ? '1' : '0');
putchar ('\n');
}
}
}
Пример использования / Вывод
$ ./bin/binslessthann
enter an integer number: 10
0 == 00000000000000000000000000000000
1 == 00000000000000000000000000000001
2 == 00000000000000000000000000000010
3 == 00000000000000000000000000000011
4 == 00000000000000000000000000000100
5 == 00000000000000000000000000000101
6 == 00000000000000000000000000000110
7 == 00000000000000000000000000000111
8 == 00000000000000000000000000001000
9 == 00000000000000000000000000001001
(конечно, нет необходимости в полные 32-разрядные для небольших чисел, но они были включены для полноты)
двоичное представление без заполнения
Как отмечено в комментариях, версия без дополнения значительно упрощает результаты читать. (цитата была "ужасные начальные нули"). Чтобы вывести незаполненную версию, вы можете сначала проверить, равно ли значение нулю, если да, просто вывести ноль, то для значений с однобитовыми значениями вы проверяете, остались ли эти биты. в значении после сдвига, если это так, продолжайте выводить биты, иначе больше ничего не выводите, например,
int main (void) {
unsigned n;
fputs ("enter an integer number: ", stdout);
if (scanf ("%u", &n) == 1) {
for (unsigned i = 0; i < n; i++) {
printf ("%d == ", i);
if (!i)
putchar ('0');
else {
unsigned s = sizeof s * CHAR_BIT;
while (s--) {
unsigned remain = i >> s;
if (remain)
putchar ((i >> s) & 1u ? '1' : '0');
}
}
putchar ('\n');
}
}
}
Пример использования / Вывод
$ ./bin/binslessthanrem
enter an integer number: 10
0 == 0
1 == 1
2 == 10
3 == 11
4 == 100
5 == 101
6 == 110
7 == 111
8 == 1000
9 == 1001
L окей вещи и дайте мне знать, если у вас есть дополнительные вопросы.