2017-01-24 2 views
1

Also ich weiß, dassGröße des Bit-Feld im Vergleich zu einem char

struct bit 
{ 
    unsigned char a : 1; 
} 

wird noch ein Byte wegen Polsterung aufzunehmen, ist meine Frage:

struct bit 
{ 
    unsigned char a : 1; 
    ... 
    unsigned char h : 1; 
} 

Wird diese Struktur nehmen die gleiche Größe wie ein Saibling? Und wenn ja, bin ich besser dran, wenn ich stattdessen eine char benutze? Ich frage, weil ich Bits als Schlüssel verwenden möchte, aber ich würde lieber bitweise Operationen vermeiden, wenn möglich.

+0

Ja zur selben Größe. Was meinst du mit "besser dran"? – m8mble

+1

* Wird diese Struktur die gleiche Größe wie ein Zeichen annehmen? * Es hängt davon ab, was zwischen den beiden Bit-Feldern, dem '' '' 'Teil Ihrer' Struktur' ist. –

+1

Es ist unklar, was das eigentliche Problem ist, das Sie zu lösen versuchen, unter welchen Einschränkungen Sie arbeiten und welche Vor- und Nachteile Sie bei der Verwendung von Bitfeldern gegenüber der Verwendung von Zeichen bei den ersten beiden sehen. –

Antwort

6

Bei der Verwendung von Bitfeldern gibt es keine Garantie. Diese Struktur kann jede Größe und jede Bit-Reihenfolge haben. In der Tat unsigned char Typ für Bit-Felder wird nicht einmal vom Standard unterstützt! Ihr Code basiert bereits auf nicht standardmäßigen Erweiterungen.

Vergessen Sie Bit-Felder, vergessen Sie char. Sie sollten uint8_t und bitweise Operatoren verwenden, wenn Sie vorhersehbaren, tragbaren Code benötigen.

+1

Oder mit einem ['std :: vector '] (http://en.cppreference.com/w/cpp/container/vector_bool) – txtechhelp

+0

@ txtechhelp Das ist eine sehr schlechte Idee. Wenn C++, verwenden Sie std :: bitset. – Lundin

+0

Ich stimme zu, dass ein ['std :: bitset'] (http://en.cppreference.com/w/cpp/utility/bitset) wäre ein anderer Weg zu gehen, aber warum würde mit einem' std :: vector ' eine _extremely_ schlechte Idee sein? Vielleicht nicht die beste Wahl angesichts bestimmter Einschränkungen (Compiler/Arch/Optimierungen), aber es hängt auch davon ab, was das OP _really_ versucht zu tun (das ist nicht klar über die Größe Bedenken und vermeiden bit weise Operationen) .. – txtechhelp

Verwandte Themen