EDIT: Men.. sodjan!!! du kan väl inte skriva när JAG håller på att svara!!!

Kod: Markera allt
struct bits {
unsigned char first:2;
unsigned char second:6;
}
Jag tror att det blir samma sak (förutom att du blandade ihop siffrorna ur din kod). Fast med signed så kan 2 bitar ha värdena -2, -1, 0 & 1. Det måste man ju tänka på (tror jag), om man ska jämföra, tex (struct bits.second == 3).Här ser jag båda fälten som en och samma unsigned char fast delat i två portitioner. Jag ser inte varje bitfält som en enskild unsigned char. Skulle det t.ex. gå att byta ut unsigned char second:2 mot signed int second:2 utan att den totala structstorleken ökar?
Kod: Markera allt
typedef struct
{
unsigned int a : 5;
unsigned int b : 5;
unsigned int c : 5;
unsigned int d : 5;
unsigned int e : 5;
unsigned int f : 5;
unsigned int g : 5;
} T_INT_KVINTAR;
Tager upp 8 bytes = 2 hela 32-bitars ints
allokering:
[aaaaaBBB|BBcccccD|DDDDeeee|eFFFFF--] [ggggg---|--------|--------|--------]
typedef struct
{
unsigned char a : 5;
unsigned char b : 5;
unsigned char c : 5;
unsigned char d : 5;
unsigned char e : 5;
unsigned char f : 5;
unsigned char g : 5;
} T_CHAR_KVINTAR;
Tager upp 7 bytes = 7 hela 8-bitars chars
allokering:
[aaaaa---][bbbbb---][ccccc---][ddddd---] [eeeee---][fffff---][ggggg---]
typedef struct
{
unsigned short a : 5;
unsigned short b : 5;
unsigned short c : 5;
unsigned short d : 5;
unsigned short e : 5;
unsigned short f : 5;
unsigned short g : 5;
} T_SHORT_KVINTAR;
Tager upp 6 bytes = 3 hela 16-bitars shorts
allokering:
[aaaaaBBB|BBccccc-][DDDDDeee|eeFFFFF-] [ggggg---|--------]