一个程序来演示 a、b 和 c 的存储位置。请注意,由于字节序,它会有点混乱。
#include<stdio.h>
#include<string.h>
struct bitfield
{
unsigned a:5;
unsigned c:5;
unsigned b:6;
};
void print_bitfield(unsigned a, unsigned c, unsigned b)
{
struct bitfield bf;
memset(&bf, 0, sizeof(bf));
bf.a = a;
bf.b = b;
bf.c = c;
unsigned char* ptr = (unsigned char*)&bf;
unsigned i;
printf("%2x %2x %2x: ", a, c, b);
for (i = 0; i < sizeof(bf); i++)
{
printf("%02x ", ptr[i]);
}
printf("\n");
}
int main()
{
printf("sizeof bitfield: %u\n",sizeof(struct bitfield));
printf(" a c b: 0 1 2 3\n");
print_bitfield(0, 0, 0);
print_bitfield(1, 0, 0);
print_bitfield(31, 0, 0);
print_bitfield(0, 1, 0);
print_bitfield(0, 31, 0);
print_bitfield(0, 0, 1);
print_bitfield(0, 0, 63);
print_bitfield(1, 3, 3);
return 0;
}
输出:
sizeof bitfield: 4
a c b: 0 1 2 3
0 0 0: 00 00 00 00
1 0 0: 01 00 00 00
1f 0 0: 1f 00 00 00
0 1 0: 20 00 00 00
0 1f 0: e0 03 00 00
0 0 1: 00 04 00 00
0 0 3f: 00 fc 00 00
1 3 3: 61 0c 00 00