Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C - Bitfelder

Angenommen, Ihr C-Programm enthält eine Reihe von TRUE/FALSE-Variablen, die wie folgt in einer Struktur namens Status gruppiert sind −

struct {
   unsigned int widthValidated;
   unsigned int heightValidated;
} status;

Diese Struktur benötigt 8 Byte Speicherplatz, aber tatsächlich werden wir entweder 0 oder 1 in jeder der Variablen speichern. Die Programmiersprache C bietet in solchen Situationen eine bessere Möglichkeit, den Speicherplatz zu nutzen.

Wenn Sie solche Variablen innerhalb einer Struktur verwenden, können Sie die Breite einer Variablen definieren, die dem C-Compiler mitteilt, dass Sie nur diese Anzahl von Bytes verwenden werden. Beispielsweise kann die obige Struktur wie folgt umgeschrieben werden −

struct {
   unsigned int widthValidated : 1;
   unsigned int heightValidated : 1;
} status;

Die obige Struktur benötigt 4 Bytes Speicherplatz für Statusvariablen, aber nur 2 Bits werden verwendet, um die Werte zu speichern.

Wenn Sie bis zu 32 Variablen mit einer Breite von jeweils 1 Bit verwenden, wird auch die Statusstruktur 4 Bytes verwenden. Sobald Sie jedoch 33 Variablen haben, wird der nächste Slot des Speichers zugewiesen und es werden 8 Bytes verwendet. Sehen wir uns das folgende Beispiel an, um das Konzept zu verstehen −

Live-Demo
#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\n", sizeof(status1));
   printf( "Memory size occupied by status2 : %d\n", sizeof(status2));
   return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis −

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

Bitfelddeklaration

Die Deklaration eines Bitfeldes hat innerhalb einer Struktur folgende Form −

struct {
   type [member_name] : width ;
};

Die folgende Tabelle beschreibt die variablen Elemente eines Bitfelds −

Sr.No. Element &Beschreibung
1

Typ

Ein ganzzahliger Typ, der bestimmt, wie der Wert eines Bitfelds interpretiert wird. Der Typ kann int, signed int oder unsigned int sein.

2

Mitgliedsname

Der Name des Bitfelds.

3

Breite

Die Anzahl der Bits im Bitfeld. Die Breite muss kleiner oder gleich der Bitbreite des angegebenen Typs sein.

Die mit einer vordefinierten Breite definierten Variablen werden als Bitfelder bezeichnet . Ein Bitfeld kann mehr als ein einzelnes Bit enthalten; Wenn Sie beispielsweise eine Variable zum Speichern eines Werts von 0 bis 7 benötigen, können Sie ein Bitfeld mit einer Breite von 3 Bit wie folgt definieren:−

struct {
   unsigned int age : 3;
} Age;

Die obige Strukturdefinition weist den C-Compiler an, dass die Altersvariable nur 3 Bits verwenden wird, um den Wert zu speichern. Wenn Sie versuchen, mehr als 3 Bits zu verwenden, können Sie dies nicht tun. Versuchen wir folgendes Beispiel −

Live-Demo
#include <stdio.h>
#include <string.h>

struct {
   unsigned int age : 3;
} Age;

int main( ) {

   Age.age = 4;
   printf( "Sizeof( Age ) : %d\n", sizeof(Age) );
   printf( "Age.age : %d\n", Age.age );

   Age.age = 7;
   printf( "Age.age : %d\n", Age.age );

   Age.age = 8;
   printf( "Age.age : %d\n", Age.age );

   return 0;
}

Wenn der obige Code kompiliert wird, wird er mit einer Warnung kompiliert, und wenn er ausgeführt wird, erzeugt er das folgende Ergebnis −

Sizeof( Age ) : 4
Age.age : 4
Age.age : 7
Age.age : 0

C Sprache

  1. C# Bitwise- und Bit-Shift-Operatoren
  2. Arten von benutzerdefinierten Funktionen in der C-Programmierung
  3. Übergeben Sie Arrays an eine Funktion in C
  4. C-Strukturen und Zeiger
  5. Java dieses Schlüsselwort
  6. Java-Kapselung
  7. C++-Struktur mit Beispiel
  8. C - Funktionen
  9. C - Variable Argumente
  10. MATLAB-Integration