Latest web development tutorials

campi di bit C

Se la struttura del programma contiene più variabili solo TRUE / FALSE digitali, come segue:

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

Questa configurazione richiede 8 byte di spazio di memoria, ma in realtà, in ciascuna variabile, si limita a memorizzare 0 o 1. In questo caso, C linguaggio fornisce un migliore utilizzo dello spazio di memoria nel modo. Se si utilizza tale variabile all'interno della struttura, è possibile definire la larghezza della variabile per dire al compilatore che si utilizzerà solo i byte. Ad esempio, la struttura di cui sopra può essere riscritta come:

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

Ora, la struttura sopra, variabile di stato occupa quattro byte di memoria, ma solo due sono utilizzati per memorizzare valori. Se si utilizza 32 variabili, ciascuna larghezza variabile di uno, allora la struttura di stato si usa 4 byte, ma più fino a quando si utilizza una variabile, se si utilizza 33 variabili, sarà in una sezione di memoria allocata le prime 33 variabili sono memorizzate, questa volta per iniziare a utilizzare 8 byte. Diamo un'occhiata ai seguenti esempi per capire questo concetto:

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

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

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

Dichiarazione Campo di bit

Nel campo di bit dichiarazione di struttura è la seguente:

struct
{
  type [member_name] : width ;
};

Quanto segue è una descrizione dell'elemento variabile di campo bit:

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

Le variabili con larghezza predefinita è chiamatoun campo di bit.campi bit può memorizzare più di un numero, ad esempio, necessario una variabile per memorizzare il valore da 0 a 7, è possibile definire una larghezza di tre campi di bit come segue:

struct
{
  unsigned int age : 3;
} Age;

Definizione della struttura sopra le direzioni compilatore C, età userà solo tre variabili per memorizzare questo valore, se si tenta di utilizzare più di tre, non si può completare. Diamo un'occhiata ai seguenti esempi:

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

Quando il codice di cui sopra è compilato, porterà un messaggio di avviso, quando viene eseguito il codice di cui sopra, esso produrrà i seguenti risultati:

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