2010-11-18 6 views
1

Je cherche dans le code écrit par d'autres membres et je suis tombé sur le code ci-dessous:membres struct C

struct myType 
{ 
int myInt : 1; 
int reserved : 31; 
}; 

Ce qui est 1 et 31 est au-dessus et quand au-dessus de la notation est utilisée?

Répondre

1

Ce sont des champs de bits. Ce code signifie que myInt est juste un bit et 31 bits reserved est

Par exemple, sur ma machine

struct a 
{ 
    int asd : 1; 
    int b : 2; 
}; 

std::cout << sizeof(a); 

imprime 4 (dépendante de la plate-forme). Dans votre exemple, la taille exacte de la structure est 32 bits, mais il est possible que la taille réelle soit différente - dépend de l'alignement

+0

Si nous mentionnons comme ceci, est-ce que la taille de l'entier, c.-à-d., 4 octets ne vient pas en considération? – Venkata

+0

La taille du type de béton est ignorée. Voir ma modification :) –

4

Ce sont des champs de bits, le nombre après les deux points spécifie la largeur, en bits, réservé pour ce champ. Ils sont souvent utilisés lorsque vous essayez de conserver de l'espace, ou lorsque vous essayez de mapper un registre externe (pensez à un matériel) qui possède des champs de bits. Notez que l'empaquetage et l'endianness affectent comment les bits sont disposés dans la mémoire, ainsi ils ne doivent pas être employés si la portabilité est importante. Notez que c'est une très mauvaise idée d'utiliser des champs de bits signés avec de très petites tailles, comme 1. Comme un bit est nécessaire pour le signe, aucun bit n'est laissé pour la valeur réelle qui n'est généralement pas une très bonne situation . L'utilisation de unsigned int myUnsigned : 1 résout ce problème.