【发布时间】:2020-06-13 12:59:29
【问题描述】:
最近我遇到了一个位域问题
union u
{
struct
{
unsigned char x : 2;
unsigned int y : 2;
}p;
int x;
};
int main()
{
union u u = { 2 };
printf("%d\n", u.p.x);
}
它的打印 2 实际上是按照小端规则。位域 y 应该被分配 2 为什么将 2 分配给 x
【问题讨论】:
-
你试过
printf("%zu\n", sizeof u);吗?这告诉了你关于unsigned char x : 2;和unsigned int y : 2;的什么信息?它与字节顺序无关。 -
你认为“小端规则”是什么?
-
size 是 8 怎么办?因为 char 是 1 byte 而 int 是 4 。即使使用位域,看起来结构填充也会出现。
标签: c bit-fields