Maison > Article > développement back-end > Champs de bits en C
Dans cette section, nous comprendrons ce qu'est un champ de bits en langage C.
Supposons que votre programme C contienne de nombreuses variables VRAI/FAUX regroupées dans une structure appelée state comme suit -
struct { unsigned int widthValidated; unsigned int heightValidated; } status;
La structure nécessite 8 bits d'espace mémoire, mais en réalité, nous stockerons dans chaque variable 0 ou 1. Dans ce cas, le langage de programmation C offre une meilleure façon d’utiliser l’espace mémoire.
Si vous utilisez de telles variables dans une structure, vous pouvez définir la largeur de la variable pour indiquer au compilateur C que vous utilisez uniquement ce nombre de bits. Par exemple, la structure ci-dessus peut être réécrite comme suit -
struct { unsigned int widthValidated : 1; unsigned int heightValidated : 1; } status;
La structure ci-dessus nécessite 4 bits d'espace mémoire pour la variable d'état, mais n'utilise que 2 bits pour stocker la valeur.
Si vous utilisez jusqu'à 32 variables, chaque variable a une largeur de 1 bit, alors la structure d'état utilisera également 4 bits. Cependant, une fois que vous avez 33 variables, il alloue l'emplacement de mémoire suivant et commence à utiliser 8 bits. Vérifions l'exemple suivant pour comprendre le concept -
Démonstration en direct
#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; }
Memory size occupied by status1 : 8 Memory size occupied by status2 : 4
La déclaration de champ de bits a la forme suivante à l'intérieur de la structure -
struct { type [member_name] : width ; };
Le tableau suivant décrit les champs de bits L'élément variable -
élément | description th> |
---|---|
type | détermine comment le type entier de la valeur du champ de bits est interprété. Le type peut être un entier, un entier signé ou un entier non signé. |
member_name | Le nom du champ de bits. |
Largeur | Le nombre de chiffres dans le champ de bits. La largeur doit être inférieure ou égale à la largeur en bits du type spécifié. |
Une variable définie avec une largeur prédéfinie est appelée un champ de bits. Un champ de bits peut contenir plusieurs bits ; par exemple, si vous avez besoin d'une variable pour stocker des valeurs de 0 à 7, vous pouvez alors définir un champ de bits d'une largeur de 3 bits comme indiqué ci-dessous -
struct { unsigned int age : 3; } Age;
La définition de la structure ci-dessus indique C compilateur, la variable age n'utilisera que 3 bits pour stocker la valeur. Si vous essayez d’utiliser plus de 3 bits, cela ne vous permettra pas de le faire. Essayons l'exemple suivant -
Démonstration en direct
#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; }
Sizeof( Age ) : 4 Age.age : 4 Age.age : 7 Age.age : 0
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!