[C con Clase] Campos de bits

Programante programante en gmail.com
Lun Feb 12 10:53:53 CET 2007


Santiago García escribió:
> Hola amigos, soy yo otra vez. Quería que me ayudarais con unas dudas 
> que tengo en los campos de bits:
>
>  
>
> En una estructura como esta:
>
>  
>
> struct Bits
>
> {
>        unsigned short bit1:5;//Variable unsigned short de 5 bits
>        unsigned short bit2:4;//Variable unsigned short de 4 bits
>        unsigned short bit3:7;//Variable unsigned short de 7 bits
> }Param[10];
>
>  
>
> Si luego uso esta sentencia:
>
>  
>
> cout << sizeof(Bits);
>
>  
>
> Lo que aparece en pantalla es 2. Yo supuse que aparecería 3 porque, 
> según se explica:
>
>  
>
> Bits |    0    1    2    3    4    5    6    7   || 8    9    10    
> 11    12    13    14    15 ||   16    17    18    19    20    21    
> 22    23  ||  24
>
> _________________________________________________________________________________________________
>
> Var |  unsigned short bit 1 ||    Vacío    ||            bit2        
> ||          Vacío            ||                        bit4            
>                 || Vacío
>
>  
>
> Según esto, la estructura debería ocupar 3 bytes y no 2. ¿Por qué 
> entonces pone que ocupa 2?
>
Porque no deja espacios vacíos en medio:
Lo que tienes es
Var |  unsigned short bit 1 ||            bit2        ||                
        bit4                            ||

En total tienes 5 + 4 + 7 bits = 16 bits = 2 bytes

No obstante el compilador podría decidir "dejar espacios en medio" si 
opina que así será más eficiente (tendrías que darle otra propiedad para 
asegurarte que lo deje así), por lo que podría cambiar de compilador a 
compilador.





Más información sobre la lista de distribución Cconclase