2011-01-16 12 views

risposta

16

Questo è un bitfield.

Questo particolare bitfield non ha molto senso in quanto è possibile utilizzare un tipo a 16 bit e si sta sprecando spazio mentre il bitfield è riempito fino alle dimensioni di int.

Di solito, lo si utilizza per le strutture che contengono elementi di dimensioni bit:

struct { 
    unsigned nibble1 : 4; 
    unsigned nibble2 : 4; 
} 
10
struct name { int a:16; } 

Significa a è definito come 16 bit spazio memoria. I rimanenti bit (16 bit) da int possono essere utilizzati per definire un'altra variabile, dire b, così:

struct name { int a:16; int b:16; } 

Così se int è di 32 bit (4 byte), allora la memoria di uno int è diviso in due variabili a e b.

PS: sto assumendo sizeof(int) = 4 byte, e 1 byte = 8 bit

2
struct s 
    { 
    int a:1; 
    int b:2; 
    int c:7; 
    };/*size of structure s is 4 bytes and not 4*3=12 bytes since all share the same space provided by int declaration for the first variable.*/ 
struct s1 
    { 
    char a:1; 
    };/*size of struct s1 is 1byte had it been having any more char _var:_val it would have been the same.*/