Utilisation de l’opérateur: en C

Doublons possibles:
Que veut dire ‘: nombre’ après un champ struct?
Que signifie ‘unsigned temp: 3’

Bonjour tout le monde, je déteste poser ce type de question, mais ça me dérange vraiment, alors je vais demander:

Quelle est la fonction de l’opérateur: dans le code ci-dessous?

#include  struct microFields { unsigned int addr:9; unsigned int cond:2; unsigned int wr:1; unsigned int rd:1; unsigned int mar:1; unsigned int alu:3; unsigned int b:5; unsigned int a:5; unsigned int c:5; }; union micro { unsigned int microCode; microFields code; }; int main(int argc, char* argv[]) { micro test; return 0; } 

Si quelqu’un s’en soucie, j’ai tiré ce code du lien ci-dessous: http://www.cplusplus.com/forum/beginner/15843/

J’aimerais vraiment savoir parce que je sais que j’ai déjà vu cela quelque part et je veux le comprendre pour quand je le reverrai.

Merci!

Ce sont des champs de bits, un exemple étant unsigned int addr:9; crée un champ addr de 9 bits.

Il est couramment utilisé pour intégrer de nombreuses valeurs dans un type intégral. Dans votre cas particulier, il définit la structure d’une instruction de microcode à 32 bits pour un CPU (éventuellement) hypothétique (si vous additionnez toutes les longueurs de champs, elles totalisent 32).

L’union vous permet de charger une seule valeur 32 bits, puis d’accéder aux champs individuels avec un code similaire à (les problèmes mineurs sont également résolus, en particulier les déclarations de code et de test ):

 #include  struct microFields { unsigned int addr:9; unsigned int cond:2; unsigned int wr:1; unsigned int rd:1; unsigned int mar:1; unsigned int alu:3; unsigned int b:5; unsigned int a:5; unsigned int c:5; }; union micro { unsigned int microCode; struct microFields code; }; int main (void) { int myAlu; union micro test; test.microCode = 0x0001c000; myAlu = test.code.alu; printf("%d\n",myAlu); return 0; } 

Ceci affiche 7, qui sont les trois bits constituant le champ de bits alu .

C’est un peu champ . Le nombre après les deux points est le nombre de bits que chaque variable prend.

C’est un déclarateur qui spécifie le nombre de bits pour la variable.

Pour plus d’informations, voir:

http://msdn.microsoft.com/en-us/library/yszfawxh(VS.80).aspx