Есть так много различных способов приблизиться к этому, как вы хотите, чтобы исследовать. Вы хотите вывести вывод? Вы хотите включить разделители? (например, 1111-0110
)? Вы хотите ограничить вывод на X число бит? И так далее.
Самый простой подход, который вы спрашиваете, но при реализации решения, почему жесткого код ограничение 8-bits
, когда вы можете написать простую общую процедуру для обработки любого unsigned
типа (до того, что вы задаете как параметр). Кроме того, когда бит-twiddling, рекомендуется использовать точные типы размеров (например, uint8_t
, ... uint64_t
), поэтому нет никаких шансов на разницу в платформе. (точные типы определены в stdint.h
) Соответствующие макросы преобразования для точных типов ширины представлены в inttypes.h
.
Ввод куски вместе, вы можете написать свой отпечаток на без ведущего двоичного представления любого значения типа до uint64_t
что-то вроде следующего:
/** unpadded binary representation of 'v'. */
void binprn (const uint64_t v)
{
if (!v) { putchar ('0'); return; }; /* handle v = 0 simply */
size_t sz = sizeof v * CHAR_BIT; /* set the number of bits */
uint64_t rem = 0; /* value holding remaining bits */
while (sz--) /* for each bit */
if ((rem = v >> sz)) /* if bits remain */
putchar ((rem & 1) ? '1' : '0'); /* output the bit */
}
Собираем вместе с коротким, например, для c = 181
, вы могли бы сделать что-то вроде:
#include <stdio.h>
#include <limits.h> /* for CHAR_BIT */
#include <stdint.h> /* for exact size type ints */
#include <inttypes.h> /* conversion macros for exact size types */
/** unpadded binary representation of 'v'. */
void binprn (const uint64_t v)
{
if (!v) { putchar ('0'); return; }; /* handle v = 0 simply */
size_t sz = sizeof v * CHAR_BIT; /* set the number of bits */
uint64_t rem = 0; /* value holding remaining bits */
while (sz--) /* for each bit */
if ((rem = v >> sz)) /* if bits remain */
putchar ((rem & 1) ? '1' : '0'); /* output the bit */
}
int main (void) {
uint8_t c = 181;
printf ("The bits in unsigned char c = '%" PRIu8 "' are:\n\n ", c);
binprn (c);
putchar ('\n'); /* tidy up */
return 0;
}
Пример использования/Выход
$ ./bin/cbits
The bits in unsigned char c = '181' are:
10110101
Просмотрите все ответы и сообщите мне, если у вас есть вопросы.
Эквивалентный способ будет '(с >> я) & 1' –
Вы также лучше обслуживаться с помощью' putchar' для вывода одного символа * *, а не называя вариационная функция 'printf'. –
Отмечено и реализовано. Спасибо за комментарии. – nikaltipar