我试图更多地了解位字段的工作原理。初始化包含位字段的结构C
考虑下面的代码: 并假设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};
给int的4个字节赋值3,不是吗?
从输出我实际得到它看起来好像上面的代码行试图将值3存储到1位字段,因此打印0x1
作为第二个输出行。
所以我的问题是:
如何这些初始化和任务对整个结构的工作吗?
另外,为什么需要{}
?
你为什么期望?您有一个分配给1位宽的字段。编译器没有义务保留额外的位。 –
@JonathanGrynspan谢谢你指出。但是,如果编译器将忽略其余位,为什么需要为每个位域指定一个类型? – pablorg
尝试打印'struct byte {TYPE var:1; };'用不同的类型'(unsigned)int/char'。很可能你会发现一个区别。 –