【发布时间】:2012-04-25 17:28:18
【问题描述】:
struct A
{
int a:2;
int b:3;
int c:3;
};
int main()
{
struct A p = {2,6,1};
printf("\n%d\n%d\n%d\n",p.a,p.b,p.c);
return 0;
}
输出是: -2,-2,1
上述代码在 C 编译器和 C++ 编译器中的输出是什么? 为什么?
【问题讨论】:
-
看看这里:ideone.com/o817J
-
是的,答案与输出一致。
-
位域只对无符号值表现良好(不确定有符号值的行为是未定义还是未指定)。
-
为什么,这是
signed和unsigned整数之间的区别。你可能想要unsigned。 -
@WilliamPursell,位域对于有符号值来说是完美定义的。
标签: c bit-fields