Компиляторонезависимая - только через маски.
Если нужно компактно хранить несколько мало-битных полей, можно объявлять примерно так:
Код
struct MyStruct
{
int field1 : 2;
int field2 : 5;
bool field3 : 1;
}
Для поля field1 будет использовано 2 бита, для field2 - 5, для field3 соотв. - 1. В целом структура будет длиной 8 байт без учета выравнивания.