Latest web development tutorials

C-Bit-Felder

Wenn die Struktur des Programms mehr als eine digital nur TRUE / FALSE Variablen enthält, wie folgt:

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

Diese Konfiguration benötigt 8 Byte Speicherplatz, aber in der Tat, in jeder Variablen speichern wir nur 0 oder 1. In diesem Fall bietet der C-Sprache eine bessere Nutzung des Speicherplatzes im Weg. Wenn Sie eine solche Variable innerhalb der Struktur verwenden, können Sie die Breite der Variablen definieren den Compiler zu sagen, dass Sie nur die Bytes verwenden. Beispielsweise kann die obige Struktur neu geschrieben werden als:

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

Nun wird die obige Struktur, Statusvariablen belegt vier Bytes des Speichers, aber nur zwei sind zum Speichern von Werten verwendet. Wenn Sie 32 Variablen verwenden, jede Variable Breite von einem, dann wird der Status Struktur 4 Bytes verwenden, aber mehr, solange Sie eine Variable verwenden, wenn Sie sich 33 Variablen verwenden, wird es unter einem Abschnitt des Speichers sein zugeteilt die ersten 33 Variablen werden gespeichert, diesmal 8 Bytes zu beginnen. Schauen wir uns die folgenden Beispiele betrachten dieses Konzept zu verstehen:

#include <stdio.h>
#include <string.h>

/* 定义简单的结构 */
struct
{
  unsigned int widthValidated;
  unsigned int heightValidated;
} status1;

/* 定义位域结构 */
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 es die folgenden Ergebnisse:

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

Bit Felddeklaration

Im Bit-Feld ist Strukturdeklaration wie folgt:

struct
{
  type [member_name] : width ;
};

Es folgt eine Beschreibung des Bitfeldes variables Element:

元素描述
type整数类型,决定了如何解释位域的值。类型可以是整型、有符号整型、无符号整型。
member_name位域的名称。
width位域中位的数量。宽度必须小于或等于指定类型的位宽度。

Variablen mit vordefinierten Breite wirdein Bit - Feld bezeichnet.Bitfelder speichern kann mehr als eine Nummer, beispielsweise benötigen eine Variable den Wert 0-7 zu speichern, sie eine Breite von drei Bit-Felder definieren, wie folgt:

struct
{
  unsigned int age : 3;
} Age;

Definition der Struktur oben Richtungen C-Compiler, Alter nur drei Variablen verwenden, um diesen Wert zu speichern, wenn Sie versuchen, mehr als drei zu verwenden, können Sie nicht vollständig. Schauen wir uns die folgenden Beispiele an:

#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 es eine Warnung tragen, wenn der obige Code ausgeführt wird, wird es die folgenden Ergebnisse erzielt:

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