Heim > Backend-Entwicklung > C++ > Hauptteil

Bitfelder in C

WBOY
Freigeben: 2023-09-08 22:57:03
nach vorne
1409 Leute haben es durchsucht

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

Ausgabe

Memory size occupied by status1 : 8
Memory size occupied by status2 : 4
Nach dem Login kopieren

Bitfeld-Deklaration:

Bitfeld-Deklaration hat die folgende Form innerhalb der Struktur –

struct {
   type [member_name] : width ;
};
Nach dem Login kopieren

Die folgende Tabelle beschreibt die Bitfelder Das variable Element – ​​

Element Beschreibung
Typ bestimmt, wie der ganzzahlige Typ des Bitfeldwerts interpretiert wird. Der Typ kann „int“, „signed int“ oder „unsigned int“ sein.
member_nameDer Name des Bitfelds.
BreiteDie 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;
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

Ausgabe

Sizeof( Age ) : 4
Age.age : 4
Age.age : 7
Age.age : 0
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonBitfelder in C. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage