Next: Les énumérations
Up: Structures, unions et énumérations
Previous: Exercice
Sous-sections
Généralités
Il est parfois nécessaire pour un programmeur de décrire en termes de bits
la structure d'une ressource matérielle de la machine.
Un exemple typique est la programmation système qui nécessite de manipuler
des registres particuliers de la machine.
Par exemple, dans le manuel du
MC 68030 de Motorola, le registre
d'état est ainsi décrit :
- -
- bit 0 : carry ;
- -
- bit 1 : overflow ;
- -
- bit 2 : zéro ;
- -
- bit 3 : négatif ;
- -
- bit 4 : extension ;
- -
- bits 5-7 : inutilisés ;
- -
- bits 8-10 : masque des interruptions ;
- -
- bit 11 : inutilisé ;
- -
- bits 12-13 : niveau de privilège ;
- -
- bits 14-15 : état des traces.
Il existe dans le langage C un moyen de réaliser de telles descriptions,
à l'aide du concept de structure.
En effet, dans une déclaration de structure, il est possible de
faire suivre la définition d'un membre par une indication du nombre de bits que
doit avoir ce membre. Dans ce cas, le langage C appelle ça un champ de
bits.
Le registre d'état du MC 68030 peut se décrire ainsi :
struct sr
{
unsigned int trace : 2;
unsigned int priv : 2;
unsigned int : 1; /* inutilisé */
unsigned int masque : 3;
unsigned int : 3; /* inutilisé */
unsigned int extend : 1;
unsigned int negative : 1;
unsigned int zero : 1;
unsigned int overflow : 1;
unsigned int carry : 1;
};
On voit que le langage C accepte que l'on ne donne pas de nom aux champs de
bits qui ne sont pas utilisés.
- 1.
- Les seuls types acceptés pour les champs de bits sont int,
unsigned int et signed int.
- 2.
- L'ordre dans lequel sont mis les champs de bits à l'intérieur
d'un mot dépend de l'implémentation, mais généralement, dans une machine
little endian les premiers champs décrivent les bits de poids faibles et
les derniers champs les bits de poids forts, alors que c'est généralement
l'inverse dans une machine big endian.
- 3.
- Un champ de bit déclaré comme étant de type int, peut en fait
se comporter comme un signed int ou comme un unsigned int
(cela dépend de l'implémentation).
Il est donc recommandé d'une manière générale de déclarer les champs
de bits comme étant de type unsigned int.
- 4.
- Un champ de bits n'a pas d'adresse, on ne peut donc pas lui appliquer
l'opérateur adresse de (
&
).
Next: Les énumérations
Up: Structures, unions et énumérations
Previous: Exercice
Bernard Cassagne
1998-12-09