Maison  >  Article  >  développement back-end  >  Champs de bits en C

Champs de bits en C

WBOY
WBOYavant
2023-09-08 22:57:031404parcourir

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 -

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

Sortie

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

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

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 -

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

Sortie

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer