我试图更多地了解位域的工作原理。
给定以下代码:假设 int 为 32 位
#include <stdio.h>
int main()
{
struct byte
{
int one:1;
};
struct byte var = {3};
printf("%d\n", var.one);
printf("%#x\n", var);
return 0;
}
我得到的输出是:
-1 0x1
但是我期待看到:
-1 0x3
自从
struct byte var = {3};
将值 3 分配给 int 的 4 个字节,不是吗?
从输出中我实际上得到的似乎是上面的代码行试图将值 3 存储到 1 位字段中,因此打印0x1
为第二个输出行。
所以我的问题是:
这些对整个结构的初始化和赋值是如何工作的?
另外,为什么是{}
必要的?