tamaño de la estructura C

struct st1{ int a:1; int b:3; int c:6; int d:3; }s1; struct st2{ char a:3; }s2; int main(){ printf("%d : %d",sizeof(s1),sizeof(s2)); getchar(); } 

Estoy recibiendo la salida como 2: 1

¿podría decirme cómo funciona este progtwig y cuál es el uso de: operador (a: 1) aquí?

Gracias

El : define un campo de bits .

En su ejemplo, los objetos de tipo struct st1 usan 13 bits en alguna disposición elegida por el comstackdor.

La disposición particular elegida cuando compiló el código originó un objeto que ocupa 2 bytes. Los 13 bits no son necesariamente los primeros (o últimos) en esos bytes.

El otro tipo de estructura ( struct st2 ) ocupa (3 bits de) 1 byte.

El operador : utilizado allí especifica los tamaños en bits de los campos contenidos allí. sizeof() devuelve la longitud del límite del byte, por lo que para el primero, 13 bits (2 bytes), y para el segundo, 1 byte.

Hay al menos dos cosas que vale la pena mencionar aquí:

  1. Cada objeto debe ser direccionable, lo que significa que al menos ocupará el tamaño de un personaje.
  2. La implementación es libre de agregar relleno para alineación u otros problemas que considere oportunos. No se garantiza que una estructura que contenga dos ints tenga el mismo tamaño que sizeof (int) * 2.