该计划是:
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;
}
Run Code Online (Sandbox Code Playgroud)
我得到1 -1 -1,为什么?a,b和c如何存储在x中?printf("%d \n",xa)时发生了什么; 执行?
您正在为您的位域使用带符号的类型,这意味着您已经创建了两个两位有符号整数和一个一位有符号整数.
两位有符号整数(二进制补码)的可能值为:-2,-1,0和1:
一位有符号整数(二进制补码)的可能值为-1和0.
通过存储"不适合"的值,就像您在这些行中所做的那样:
x.b = 3;
x.c = 1;
Run Code Online (Sandbox Code Playgroud)
您将获得奇怪的行为,因为您存储的位模式在读取时会有不同的解释.通过以下操作可以获得类似的体验:
char x = 58147;
Run Code Online (Sandbox Code Playgroud)
在具有8位char类型的计算机上,该值将不适合,因此您在访问时将阅读不同的内容x.
| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |