Eine spezielle Form von Membern von structs sind Bitfelder. Sie
werden allerdings völlig implementationsabhängig abgespeichert und
deshalb nur in vergleichsweise exotischen Zusammenhängen verwendet. Wir
werden nur kurz auf sie eingehen.
Ein Bitfeld ist eine Sammlung von (theoretisch) beliebig vielen Bits, die
zusammen als eine ganze Zahl interpretiert werden. Die Speicherung
ist implementationsabhängig; meistens ist auch die Anzahl von Bits
durch die jeweilige Größe von int beschränkt.
Aufeinanderfolgende Bitfelder werden meistens hintereinander im Speicher
abgelegt und teilen sich gegebenenfalls Bytes. Bitfelder der Länge 0
synchronisieren die Felder mit den Grenzen der Hauptspeichereinheiten (z.B. mit
32 Bit). Nicht jedes Feld muß benannt sein; es dient dann nur zum
Auffüllen und kann nicht selbst angesprochen werden.
Mit folgenden Bitfeldern könnte man ein Datum speicherplatzsparend
speichern. Die Gesamtanzahl von Bits ist 16, und meistens wird die
Struktur auch tatsächlich in 2 Bytes untergebracht:
- struct datum
{
unsigned day:5, month:4, year:7;
};
Der Grundtyp muß ganzzahlig sein. Bei signed-Typen wird
die Bitfolge als vorzeichenbehaftete Zahl (im Zweierkomplement) interpretiert,
bei unsigned-Typen wird mit vorzeichenlosen Zahlen gearbeitet.