Ein Bitfeld wird verwendet um Speicherplatz zu sparen indem mehrere boolesche Werte oder kleine ganze Zahlen in einem einzigen ganzzahligen Wert gespeichert werden. Ein Bitfeld wird normalerweise innerhalb einer Struktur definiert, wobei jedes Feld eine bestimmte Anzahl von Bits einnimmt. Möchte man zum Beispiel eine Zahl speichern die nie größer als 13 wird, benötigt man dafür 4 Bits (2^4 ist 16). Würde man diese Zahl in einem char speichern wäre das 1 Byte. 1 Byte sind 8 Bit, damit wären 4 Bit verschwendet. Hier ist ein Beispiel, das die Verwendung von Bitfeldern zeigt.
#include <stdio.h>
// Definition einer Struktur mit Bitfeldern
struct BitfieldExample {
unsigned int flag1 : 1; // 1 Bit für flag1
unsigned int flag2 : 1; // 1 Bit für flag2
unsigned int value : 4; // 4 Bits für value (kann Werte von 0 bis 15 speichern)
unsigned int reserved : 2; // 2 Bits reserviert
};
int main() {
struct BitfieldExample example;
// Initialisierung der Bitfelder
example.flag1 = 1;
example.flag2 = 0;
example.value = 9; // 9 ist im Bereich von 4 Bits (0-15)
example.reserved = 3; // 3 ist im Bereich von 2 Bits (0-3)
// Ausgabe der Werte
printf("Flag1: %u\n", example.flag1);
printf("Flag2: %u\n", example.flag2);
printf("Value: %u\n", example.value);
printf("Reserved: %u\n", example.reserved);
// Überschreiten des Bitbereichs
example.value = 16; // Überschreitet 4 Bits
printf("Value nach Überschreitung: %u\n", example.value); // Der Wert wird abgeschnitten
return 0;
}