Maison > développement back-end > C++ > le corps du texte

Champs de bits en C

WBOY
Libérer: 2023-09-08 22:57:03
avant
1409 Les gens l'ont consulté

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;
Copier après la connexion

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;
Copier après la connexion

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 -

Exemple de code

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;
}
Copier après la connexion

Sortie

Memory size occupied by status1 : 8
Memory size occupied by status2 : 4
Copier après la connexion

Déclaration de champ de bits :

La déclaration de champ de bits a la forme suivante à l'intérieur de la structure -

struct {
   type [member_name] : width ;
};
Copier après la connexion

Le tableau suivant décrit les champs de bits L'élément variable -

élément description
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_nameLe nom du champ de bits.
LargeurLe 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;
Copier après la connexion

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 -

Sample Code

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;
}
Copier après la connexion

Sortie

Sizeof( Age ) : 4
Age.age : 4
Age.age : 7
Age.age : 0
Copier après la connexion

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!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal