不要忘记接受其他问题的最有用答案。请查看常见问题解答和每个答案旁边的勾选标记。 - Jonathan Leffler
请注意,(a) int x:2; 的符号是实现定义的(使用signed int或unsigned int),(b) 类型为char的位域是非标准的,没有真正的理由不将y声明为unsigned y:4;。 - Keith Thompson
1个回答
7
7
这是用来指定位域的。字段的大小以位为单位给出。布局是与编译器相关的。
- Jonathan Leffler
3
该死,每当我在核对答案时,总有人比我更快地找到了它 :(,干得好。 - Avery3R
@Jonathan Leffler - 你的意思是以下结构体中 x 和 y 的顺序不能保证吗?- struct layout {int x:2; int y:2}; - MByD
1@MByD:我的意思是,C标准没有定义x的位是最高有效位还是最低有效位。它没有定义这些位域是存储在1个字节、2个字节或4个字节(或任何其他字节数)中的。它没有定义这些值是有符号还是无符号的(因此您无法确定x的范围是-2..+1还是0..3,或者如果不使用二进制补码算术,则是其他范围);y也是如此。所有这些属性都是实现定义的(因此它们是已知和固定的,但是您不能在不查看编译器手册的情况下确定答案)。 - Jonathan Leffler
int x:2;
的符号是实现定义的(使用signed int
或unsigned int
),(b) 类型为char
的位域是非标准的,没有真正的理由不将y
声明为unsigned y:4;
。 - Keith Thompson