Как мне напечатать один бит? - PullRequest
6 голосов
/ 08 декабря 2008

Подскажите пожалуйста, как мне немного напечатать, например printf("%d",bit);.

Ответы [ 6 ]

19 голосов
/ 08 декабря 2008

Если бит - это просто целое число, которое содержит требуемое значение в младшем значащем бите, то:

printf("%d", bit & 0x1);

должен это сделать. & Выполняет двоичное И с числом, для которого установлен только первый значащий бит, поэтому вы удаляете все остальные биты в целом числе.

9 голосов
/ 08 декабря 2008

Если вам нужно обобщить больше, чем Гермса, вы можете сделать это:

#define IsBitSet(val, bit) ((val) & (1 << (bit)))

/* ... your code ... */

printf ("%c", IsBitSet(bit, 0) ? '1' : '0');

printf эквивалентен ответу Гермса как есть.

Если вы говорите о битовом поле в C, вы можете сделать это:

struct foo { int b:1; } myFoo;

printf("%c", myFoo.b ? '1' : '0');
6 голосов
/ 08 декабря 2008

Смежный вопрос: Как установить, очистить и переключить один бит? - это расширенное обсуждение однобитного доступа в c и c ++.

3 голосов
/ 08 декабря 2008

Для печати m-го бита (m из 1..16 или 32) n:

void print_bit(n, m)
{
    printf("%d", n & (1 << (m - 1)));
}

Удалите бит - 1, если ваш счетчик битов начинается с 0.

1 голос
/ 11 июля 2011

Вы можете использовать «союз»:

union bitshow {
    unsigned bit1:1;
    int i;
};

int main() {
    union bitshow bit;
    cin >> bit.i;
    cout << bit.bit1;
    return 0;
}
1 голос
/ 09 декабря 2008

Ответ C ++ проще, чем ответ C89, с собственным типом bool:

bool b = true;
std::cout << b;

C99 в достаточной степени похож:

_Bool b = 1;
printf("%d", b);
...