Heim  >  Artikel  >  Backend-Entwicklung  >  Bitfelder in C

Bitfelder in C

WBOY
WBOYnach vorne
2023-09-08 22:57:031404Durchsuche

Bitfelder in C

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 –

Beispielcode

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;
}

Ausgabe

Memory size occupied by status1 : 8
Memory size occupied by status2 : 4

Bitfeld-Deklaration:

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:

Beispielcode

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;
}

Ausgabe

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen