Цитата(Pathfinder @ Mar 19 2007, 14:55)

Компиляторонезависимая - только через маски.
Если нужно компактно хранить несколько мало-битных полей, можно объявлять примерно так:
Код
struct MyStruct
{
int field1 : 2;
int field2 : 5;
bool field3 : 1;
}
Для поля field1 будет использовано 2 бита, для field2 - 5, для field3 соотв. - 1. В целом структура будет длиной 8 байт без учета выравнивания.
У какого-то компилятора (увы, уже не помню у какого) был "прикол" - для каждого поля выделялся отдельный int, если они перечислялись через ';'. Эти же поля упаковывались при перечислении через запятую. А байтовые поля вообще, кажется, никаким компилятором не понимаются, только int'ы в той разрядности, в которой это понимает компилятор (ну так K&R заложили).
Т.е. самое коректное, безопасное и переносимое - действительно через маски.