In diesem Abschnitt werden wir verstehen, was ein Bitfeld in der C-Sprache ist.
Angenommen, Ihr C-Programm enthält viele WAHR/FALSCH-Variablen, die wie folgt in einer Struktur namens „Zustand“ gruppiert sind:
struct { unsigned int widthValidated; unsigned int heightValidated; } status;
Die Struktur erfordert 8 Bit Speicherplatz, aber in Wirklichkeit speichern wir in jeder Variablen 0 oder 1. In diesem Fall bietet die Programmiersprache C eine bessere Möglichkeit, den Speicherplatz zu nutzen.
Wenn Sie solche Variablen in einer Struktur verwenden, können Sie die Breite der Variablen definieren, um dem C-Compiler mitzuteilen, dass Sie nur diese Anzahl an Bits verwenden. Die obige Struktur kann beispielsweise wie folgt umgeschrieben werden:
struct { unsigned int widthValidated : 1; unsigned int heightValidated : 1; } status;
Die obige Struktur erfordert 4 Bit Speicherplatz für die Zustandsvariable, verwendet jedoch nur 2 Bit zum Speichern des Werts.
Wenn Sie bis zu 32 Variablen verwenden, ist jede Variable 1 Bit breit, dann verwendet die Statusstruktur ebenfalls 4 Bits. Sobald Sie jedoch 33 Variablen haben, wird der nächste Speicherplatz zugewiesen und beginnt mit der Verwendung von 8 Bits. Schauen wir uns das folgende Beispiel an, um das Konzept zu verstehen –
Live-Demonstration
#include <stdio.h> #include <string.h> /* define simple structure */ struct { unsigned int widthValidated; unsigned int heightValidated; } status1; /* define a structure with bit fields */ struct { unsigned int widthValidated : 1; unsigned int heightValidated : 1; } status2; int main( ) { printf( "Memory size occupied by status1 : %d</p><p>", sizeof(status1)); printf( "Memory size occupied by status2 : %d</p><p>", sizeof(status2)); return 0; }
Memory size occupied by status1 : 8 Memory size occupied by status2 : 4
Bitfeld-Deklaration hat die folgende Form innerhalb der Struktur –
struct { type [member_name] : width ; };
Die folgende Tabelle beschreibt die Bitfelder Das variable Element –
Element | Beschreibung th> |
---|---|
Typ | bestimmt, wie der ganzzahlige Typ des Bitfeldwerts interpretiert wird. Der Typ kann „int“, „signed int“ oder „unsigned int“ sein. |
member_name | Der Name des Bitfelds. |
Breite | Die Anzahl der Ziffern im Bitfeld. Die Breite muss kleiner oder gleich der Bitbreite des angegebenen Typs sein. |
Eine mit einer vordefinierten Breite definierte Variable wird als Bitfeld bezeichnet. Ein Bitfeld kann mehrere Bits enthalten. Wenn Sie beispielsweise eine Variable zum Speichern von Werten von 0 bis 7 benötigen, können Sie wie unten gezeigt ein Bitfeld mit einer Breite von 3 Bits definieren –
struct { unsigned int age : 3; } Age;
Die obige Strukturdefinition gibt C an Compiler verwendet die Altersvariable nur 3 Bits zum Speichern des Werts. Wenn Sie versuchen, mehr als 3 Bits zu verwenden, ist dies nicht möglich. Probieren wir das folgende Beispiel aus:
Live-Demonstration
#include <stdio.h> #include <string.h> struct { unsigned int age : 3; } Age; int main( ) { Age.age = 4; printf( "Sizeof( Age ) : %d</p><p>", sizeof(Age) ); printf( "Age.age : %d</p><p>", Age.age ); Age.age = 7; printf( "Age.age : %d</p><p>", Age.age ); Age.age = 8; printf( "Age.age : %d</p><p>", Age.age ); return 0; }
Sizeof( Age ) : 4 Age.age : 4 Age.age : 7 Age.age : 0
Das obige ist der detaillierte Inhalt vonBitfelder in C. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!