- 论坛徽章:
- 0
|
本帖最后由 matry_wu 于 2010-08-28 16:55 编辑
一点测试代码。
编译器:gcc4.1.2。
测试代码:- #include <stdio.h>
- #include <string.h>
- struct t1_t
- {
- int a : 3;
- int b : 4;
- int c : 7;
- int d : 1;
- int e : 16;
- int f : 2;
- };
- void printfBit(int num)
- {
- for (int i = 31; i >=0; i--)
- {
- if (num & 1 << i)
- {
- printf("1");
- }
- else
- {
- printf("0");
- }
- if (i % 8 == 0)
- {
- printf(" ");
- }
- }
- printf("\n");
- return;
- }
- int main(int argc, char **argv)
- {
- t1_t t1;
- memset( &t1, 0, sizeof(t1));
- t1.a = 0x0;
- t1.b = 0xffffffff;
- t1.c = 0x0;
- t1.d = 0xffffffff;
- t1.e = 0xffffffff;
- t1.f = 0xffffffff;
- printf("sizeof t1 %d\n", sizeof(t1));
- int size = sizeof(t1);
- for ( int i = size / 4 - 1; i >= 0; i-- )
- {
- printfBit(*((int *)(&t1) + i));
- }
- printf("t1.a %x, t1.b %x, t1.c %x, t1.d %x, t1.e %x, t1.f %x\n", t1.a, t1.b, t1.c, t1.d, t1.e, t1.f);
- return 0;
- }
复制代码 测试结果:- sizeof t1 8
- 00000000 00000000 00000000 00000011
- 01111111 11111111 11000000 01111000
- t1.a 0, t1.b ffffffff, t1.c 0, t1.d ffffffff, t1.e ffffffff, t1.f ffffffff
复制代码 结论:
1. bitfield 按32位对齐。
2. bitfiild 不支持长度为0的位段。不支持未命名位段。否则编译出错。 |
|