57 votes

Que signifie "unsigned temp:3" dans une structure ou une union ?

Duplicata possible :
Que signifie ce code C++ ?

J'essaie d'appliquer une structure C à Java en utilisant JNA. Je suis tombé sur quelque chose que je n'ai jamais vu.

Les struct est la suivante :

struct op 
{
    unsigned op_type:9;  //---> what does this mean? 
    unsigned op_opt:1; 
    unsigned op_latefree:1; 
    unsigned op_latefreed:1; 
    unsigned op_attached:1; 
    unsigned op_spare:3; 
    U8 op_flags; 
    U8 op_private;
};

Vous pouvez voir que certaines variables sont définies comme unsigned op_attached:1 et je ne sais pas ce que cela signifie. Cela aurait-il une incidence sur le nombre d'octets à allouer à cette variable particulière ?

42voto

utnapistim Points 12060

Cette construction spécifie la longueur en bits de chaque champ.

L'avantage de cette méthode est que vous pouvez contrôler les sizeof(op) Si vous faites attention, la taille de la structure sera la somme des tailles des champs à l'intérieur.

Dans votre cas, la taille de l'opération est de 32 bits (c'est-à-dire, sizeof(op) est de 4).

La taille est toujours arrondie au multiple de 8 supérieur pour chaque groupe de constructions non signées xxx:yy ;.

En d'autres termes :

struct A
{
    unsigned a: 4;    //  4 bits
    unsigned b: 4;    // +4 bits, same group, (4+4 is rounded to 8 bits)
    unsigned char c;  // +8 bits
};
//                    sizeof(A) = 2 (16 bits)

struct B
{
    unsigned a: 4;    //  4 bits
    unsigned b: 1;    // +1 bit, same group, (4+1 is rounded to 8 bits)
    unsigned char c;  // +8 bits
    unsigned d: 7;    // + 7 bits
};
//                    sizeof(B) = 3 (4+1 rounded to 8 + 8 + 7 = 23, rounded to 24)

Je ne suis pas sûr de m'en souvenir correctement, mais je crois que j'ai bien compris.

19voto

James McNellis Points 193607

Il déclare un champ de bits le nombre qui suit les deux points donne la longueur du champ en bits (c'est-à-dire le nombre de bits utilisés pour le représenter).

6voto

goedson Points 400
unsigned op_type:9;

signifie que op_type est une variable entière de 9 bits.

4voto

plinth Points 26817

Le modificateur deux-points sur les types intégraux spécifie le nombre de bits que l'int doit occuper.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X