Le langage Linux C a-t-il des bits ?

藏色散人
藏色散人original
2023-03-28 10:57:511770parcourir

Le langage C Linux a bit ; dans le langage C du microcontrôleur, bit est un nouveau mot-clé, qui est souvent utilisé pour définir une "variable bit" ; la méthode de définition des données de type bit en langage C est la suivante : 1. Définir via sbit ou bit ; 2. Défini via des champs de bits (dans les structures) ; 3. Défini via des opérateurs de bits combinés.

Le langage Linux C a-t-il des bits ?

L'environnement d'exploitation de ce tutoriel : système linux5.9.8, ordinateur Dell G3.

Y a-t-il un peu pour le langage Linux C ?

Oui.

Le langage C définit les données de type bit :

1 Définir via sbit ou bit

sbit est mappé au port IO (le "bit" du port IO tel que P1^1)

bit peut être trouvé. dans la RAM Dans l'espace d'adressage, il est généralement utilisé comme bit d'indicateur pour le jugement du programme.

Pensez que l'un d'eux est externe (sbit) et l'autre est interne (bit).

Dans le langage C du microcontrôleur, bit est un nouveau mot-clé, souvent utilisé pour définir une "variable de bit"

2. Définition à travers des champs de bits (dans les structures)

Définition des champs de bits et description des variables de champ de bits Le La définition du champ de bits est similaire à la définition de la structure, et sa forme est : struct nom de la structure du champ de bits

{liste des champs de bits} ; Par exemple :

struct bs 
{ 
 int a:8; 
 int b:2; 
 int c:6; 
};

  Les variables de champ de bits sont déclarées de la même manière que les variables de structure. Vous pouvez définir d'abord puis expliquer, définir et expliquer en même temps, ou expliquer directement. Par exemple :

struct bs 
{ 
 int a:8; 
 int b:2; 
 int c:6; 
}data;

 Indique que data est une variable bs, occupant deux octets au total. Le champ de bits a occupe 8 bits, le champ de bits b occupe 2 bits et le champ de bits c occupe 6 bits. Il existe plusieurs explications pour la définition des champs de bits :

 1. Un champ de bits doit être stocké dans le même octet et ne peut pas s'étendre sur deux octets. Si l'espace restant d'un octet n'est pas suffisant pour stocker un autre champ binaire, le champ binaire doit être stocké à partir de l'unité suivante. Vous pouvez également démarrer intentionnellement un champ de bits à partir de l'unité suivante. Par exemple :

struct bs 
{ 
 unsigned a:4 
 unsigned :0 /*空域*/ 
 unsigned b:4 /*从下一单元开始存放*/ 
 unsigned c:4 
}

Dans cette définition de champ de bits, a occupe 4 bits du premier octet, remplissez les 4 derniers bits avec 0 pour indiquer que vous ne l'utilisez pas, b commence à partir du deuxième octet, occupant 4 bits, et c occupe 4 bits .

  2. Étant donné que le champ de bits ne peut pas s'étendre sur deux octets, la longueur du champ de bits ne peut pas être supérieure à la longueur d'un octet, ce qui signifie qu'il ne peut pas dépasser 8 bits binaires.

  3. Le champ bit ne peut avoir aucun nom de domaine bit. Dans ce cas, il sert uniquement à remplir ou ajuster la position. Les champs de bits sans nom ne peuvent pas être utilisés. Par exemple :

struct k 
{ 
 int a:1 
 int :2 /*该2位不能使用*/ 
 int b:3 
 int c:2 
};

D'après l'analyse ci-dessus, nous pouvons voir que le champ de bits est essentiellement un type de structure, mais ses membres sont alloués en termes binaires.

  2. L'utilisation des champs de bits

L'utilisation des champs de bits est la même que celle des membres de la structure. Sa forme générale est : Nom de variable du champ de bits • Nom de domaine de bits Les champs de bits permettent une sortie dans différents formats.

main(){ 
 struct bs 
 { 
  unsigned a:1; 
  unsigned b:3; 
  unsigned c:4; 
 } bit,*PBit; 
 bit.a=1; 
 bit.b=7; 
 bit.c=15; 
 printf("%d,%d,%d\n",bit.a,bit.b,bit.c); 
 PBit=&bit; 
 PBit->a=0; 
 PBit->b&=3; 
 PBit->c|=1; 
 printf("%d,%d,%d\n",PBit->a,PBit->b,PBit->c); 
}

 L'exemple de programme ci-dessus définit la structure du champ de bits bs, et les trois champs de bits sont a, b et c. Le bit variable de type bs et la variable de pointeur PBit pointant vers le type bs sont expliqués. Cela signifie que les champs de bits peuvent également utiliser des pointeurs.

Les lignes 9, 10 et 11 du programme attribuent respectivement des valeurs à trois champs de bits. (Il convient de noter que l'affectation ne peut pas dépasser la plage autorisée du champ de bits.) La ligne 12 du programme affiche le contenu des trois champs au format entier. La ligne 13 envoie l'adresse du bit variable du champ de bits à la variable de pointeur PBit. La ligne 14 utilise un pointeur pour réaffecter le champ de bits a à 0. La ligne 15 utilise l'opérateur de bits composé "&=". Cette ligne est équivalente à : PBit->b=PBit->b&3. La valeur d'origine dans le champ de bits b est 7 et le résultat de l'opération ET au niveau du bit est 3. est 3 (111&011=011, la valeur décimale est 3). De même, l'opération de bit composé "|=" est utilisée dans la ligne 16 du programme, ce qui équivaut à : PBit->c=PBit->c|1 et le résultat est 15. La ligne 17 du programme affiche les valeurs de ces trois champs à l'aide de pointeurs.

L'objectif principal de l'utilisation des champs de bits est de compresser le stockage. Les règles générales sont les suivantes :

1) Si les champs de champs de bits adjacents sont du même type et que la somme de leurs largeurs de bits est inférieure à la taille du type, les champs suivants seront immédiatement adjacents aux précédents. Un champ est stocké jusqu'à ce qu'il ne puisse pas être pris en compte

2) Si les champs de champs de bits adjacents sont du même type, mais que la somme de leurs largeurs de bits est supérieure à la taille de ; le type, les champs suivants partiront d'une nouvelle unité de stockage avec son décalage est un multiple entier de la taille de son type

3) Si les champs de champ de bits sont intercalés avec des champs non-champs de bits, aucune compression ne sera effectuée ; La taille totale de la structure entière est un multiple entier de la taille du membre de type de base le plus large.

3. Opérer en combinant des opérateurs de bits

#define Setbit(x,y)  (x|=(0x01<<y))   //置位
#define Clrbit(x,y)  (x&=(~(0x01<<y)))  //复位(清零)
#define Chkbit(x,y)  (x&(0x01<<y))     //检位

Apprentissage recommandé : "

Tutoriel vidéo Linux

"

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:
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