Latest web development tutorials

les champs de bits C

Si la structure du programme contient plus d'une variable que TRUE / FALSE numériques, comme suit:

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

Cette configuration nécessite 8 octets d'espace mémoire, mais en fait, dans chaque variable, nous ne stocker 0 ou 1. Dans ce cas, le langage C permet une meilleure utilisation de l'espace mémoire de la manière. Si vous utilisez une telle variable dans la structure, vous pouvez définir la largeur de la variable pour indiquer au compilateur que vous allez utiliser uniquement les octets. Par exemple, la structure ci-dessus peut être réécrite comme:

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

Maintenant, la structure ci-dessus, la variable d'état occupe quatre octets de mémoire, mais seulement deux sont utilisés pour stocker des valeurs. Si vous utilisez 32 variables, chaque largeur variable de l'un, la structure d'état utilise 4 octets, mais plus aussi longtemps que vous utilisez une variable, si vous utilisez 33 variables, il sera dans une section de mémoire allouée les 33 premières variables sont stockées, cette fois pour commencer à utiliser 8 octets. Regardons les exemples suivants pour comprendre ce concept:

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

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

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

déclaration de champ Bit

Dans le champ de bits déclaration de la structure est la suivante:

struct
{
  type [member_name] : width ;
};

Ce qui suit est une description de l'élément variable de champ de bits:

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

Variables avec largeur prédéfinie est appeléun champ de bits.Les champs de bits peuvent stocker plus d'un numéro, par exemple, ont besoin d'une variable pour stocker la valeur de 0 à 7, vous pouvez définir une largeur de trois champs de bits comme suit:

struct
{
  unsigned int age : 3;
} Age;

Définition de la structure ci-dessus directions compilateur C, l'âge n'utilisera trois variables pour stocker cette valeur, si vous essayez d'utiliser plus de trois, vous ne pouvez pas complète. Regardons les exemples suivants:

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

Lorsque le code ci-dessus est compilé, il portera un avertissement lorsque le code ci-dessus est exécuté, il va produire les résultats suivants:

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