размер структуры 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(); } 

Я получаю вывод как 2: 1

скажите, пожалуйста, как работает эта программа и как ее использовать: operator (a: 1) здесь.

Спасибо

Параметр : определяет бит-поле .

В вашем примере объекты типа struct st1 используют 13 бит в некоторой компоновке, выбранной компилятором.

Конкретная компоновка, выбранная при компиляции кода, создала объект, который занимает 2 байта. 13 бит не обязательно являются первыми (или последними) в этих байтах.

Другой тип структуры ( struct st2 ) занимает (3 бита из) 1 байт.

Используемый здесь оператор : определяет размеры в битах содержащихся там полей. sizeof() возвращает длину байта байта, поэтому для первого, 13 бит (2 байта), а для второго – 1 байт.

Здесь, по крайней мере, стоит отметить две вещи:

  1. Каждый объект должен быть адресуемым, что означает, что он по крайней мере займет размер одного символа.
  2. Реализация может свободно добавлять дополнения для выравнивания или другие проблемы по своему усмотрению. Iow, структура, содержащая два ints, не гарантируется равным по размеру sizeof (int) * 2.