Chemodan228, это смотря как округлять. Компиляторы любят округлять до чисел кратных размеру регистра, потому что это делает обращение к памяти проще и быстрее. Но можно, конечно, настоять на упаковке и получится 5:
#include <stdio.h>
struct s {
int a: 1;
int b: 2;
int c: 30;
} __attribute__((packed));
int main()
{
printf("%d\n", sizeof(struct s));
}