typedef struct xp {
int a:2;
int b:2;
int c:1;
} xp;
int main(void)
{
xp x;
memset(&x, 0, sizeof(xp));
x.a = 1;
x.b = 3;
x.c = 1;
printf("%d\n",x.a);
printf("%d\n",x.b);
printf("%d\n",x.c);
return 0;
}
我得到1 -1 -1,为什么? a,b和c如何存储在x中? printf(“%d \ n”,x.a);被执行了吗?
答案 0 :(得分:5)
您正在为您的位域使用带符号的类型,这意味着您已经创建了两个两位有符号整数和一个一位有符号整数。
两位有符号整数(二进制补码)的可能值为:-2,-1,0和1:
一位有符号整数(二进制补码)的可能值为-1和0。
通过存储“不适合”的值,就像您在这些行中所做的那样:
x.b = 3;
x.c = 1;
您将会遇到奇怪的行为,因为您存储的位模式在读取时会有不同的解释。您可以通过以下方式获得类似的体验:
char x = 58147;
在具有8位char
类型的计算机上,该值不适合,因此在访问x
时您会看到不同的内容。
答案 1 :(得分:2)