Poinformuj mnie, jak mogę wydrukować trochę, jak printf("%d",bit);
.Jak wydrukować jeden bit?
Odpowiedz
Jeśli bit jest tylko int, który zawiera żądaną wartość w najmniej znaczącego bitu, a następnie:
printf("%d", bit & 0x1);
powinno wystarczyć. & wykonuje binarne-ORAZ o numerze tylko z pierwszym znaczącym bitem, więc usuwasz wszystkie pozostałe bity w liczbie całkowitej.
Należy pamiętać, że wydobycie jednego bitu od liczby wielobajtowej sprawia, że napotkasz problemy z endiansem. – gnud
@gnud: To ma zastosowanie tylko wtedy, gdy zostanie zrobione przeciwko pamięci, za pomocą wskaźników. bit i 0x1 zawsze będą działały, niezależnie od sposobu zapisania wartości w pamięci. – unwind
Aby wydrukować trochę m-ty (m od 1..16 lub 32) N:
void print_bit(n, m)
{
printf("%d", n & (1 << (m - 1)));
}
Zdjąć - 1
trochę jeśli bitowy licznik zaczyna się od 0.
To się nie uda. Ukrywasz bit, który chcesz, ale pozostawiasz ten fragment na miejscu, więc nie otrzymasz 1 ani 0. Aby zawsze uzyskać 1 lub 0 dla tego bitu, musisz przesunąć zmienną w prawo, a nie przesunąć maska została. – Herms
Dobrze, nieodebrane, dzięki. – Keltia
Co jest nieco w twojej funkcji? "N" nie jest używane. Czy chodziło Ci o printf ("% d", n & (1 << (m - 1))? – Koshmaar
Jeśli potrzebujesz aby uogólnić więcej niż Herms, możesz to zrobić:
#define IsBitSet(val, bit) ((val) & (1 << (bit)))
/* ... your code ... */
printf ("%c", IsBitSet(bit, 0) ? '1' : '0');
Plik printf jest odpowiednikiem odpowiedzi Herms, jak jest.
Jeśli mówisz bitfield w C, można to zrobić:
struct foo { int b:1; } myFoo;
printf("%c", myFoo.b ? '1' : '0');
Brakuje nawiasu zamykającego na końcu definicji makra, nie? – bortzmeyer
dobre złapanie - naprawiono to. – plinth
trochę ronda - dlaczego nie "((val) >> (bit)) i 0x1', więc możesz wydrukować go jako liczbę całkowitą zamiast potrójnego? –
Powiązane pytanie: How do you set, clear, and toggle a single bit? to rozbudowana dyskusja dostępu pojedynczego bitu w C i C++.
C++ odpowiedź jest łatwiejsza niż C89 jednego z natywnego typu bool:
bool b = true;
std::cout << b;
C99 jest dość podobny:
_Bool b = 1;
printf("%d", b);
Boole są generalnie niejedno bitowe. –
Można użyć "unii":
union bitshow {
unsigned bit1:1;
int i;
};
int main() {
union bitshow bit;
cin >> bit.i;
cout << bit.bit1;
return 0;
}
Czy to wydrukować najbardziej znaczące bit, najmniej znaczący bit lub coś innego? Nie możesz tego wiedzieć, ponieważ nie jest przenośny. – interjay
To jest dobre pytanie, które wymaga przeprogramowania, ale nie mam jeszcze uprawnień do edycji ... –