Soll eine Komponente ein Bitfeld sein, wird hinter dem Komponentennamen ein Doppelpunkt notiert. Hinter dem Doppelpunkt folgt die Anzahl an Bits, die für diese Komponente zur Verfügung stehen sollen. Eine Bitfeldkomponente muss ein ganzzahliger Typ sein (char, int, unsigned int ...). Für Einzelbits ist der Typ unsigned int am sichersten in der Handhabung.
Beispiele
typedef struct { int id; char Name[17]; int Vorzeichen : 1; // Vorzeichenbit für die Komponente Höhenabweichung unsigned int Hoehenabweichung : 5; // Die Höhenabweichung besitzt eine Auflösung von 5 Bits. } TMeinTyp; |
typedef struct { unsigned int Fertigungszustand : 5, // Mehr als 32 Zustände werden nicht benötigt. fehlerhaft : 1, // ein Wahrheitswert auswerfen : 1, // aktiviert einen Auswurf-Aktor bearbeiten : 1; // aktiviert eine Bearbeitungsmaschine } TFertigung; |
typedef struct { unsigned int b0 : 1, b1 : 1, b2 : 1, b3 : 1, b4 : 1, b5 : 1, b6 : 1, b7 : 1; } T8Einzelbits; |
Auf ein Bitfeld wird genau so zugegriffen wie auf jede andere Komponente eines struct.
Beispiel
T8Einzelbits Eingang, Ausgang; if (Eingang.b3 & Eingang.b7) Ausgang.b2 = 1; else Ausgang.b2 = 0; // oder kürzer Ausgang.b2 = Eingang.b3 & Eingang.b7; |