Um Speicherplatz zu sparen können sogenannte Bitfelder
definiert werden.
Diese haben eine feste Anzahl an Bits und können keine Werte annehmen, die
durch mehr Bits repräsentiert werden. Bitfelder können vom Typ
[[un]signed] int
sein. In einer Struktur aufeinanderfolgende
Bitfelder desselben Typs werden im Speicher wenn möglich
direkt
hintereinander abgespeichert. Bitfelder der Länge 0 bewirken, daß das
nächste Bitfeld zu Beginn des nächsten Wortes abgespeichert wird (sog.
alignment). Die Länge eines Wortes hängt vom verwendeten
Computer ab. Der Vorteil ist eine meist verkürzte Zugriffszeit.
Namenlose Bitfelder verbrauchen Speicherplatz, können aber nicht
referenziert werden.
Pointer auf Bitfelder sind nicht gestattet. Ebenso sind statische Bitfelder verboten.
struct bitfeld { unsigned int AX:16; // 16-Bit Register unsigned int BL:8; // 8-Bit Register unsigned int BH:8; // dto. unsigned int b1:1; // Boolean; unsigned int b1:2; // dto. unsigned int dummy:0; // nächstes Bitfeld zu Beginn eines Wortes unsigned int EX:16; unsigned int :8; // Speicherlücke; unsigned int DH:8; };