Ein Bitfeld ist in C immer ein Teil eines struct.

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;