struct st1{
int a:1; int b:3; int c:6; int d:3;
}s1;
struct st2{
char a:3;
}s2;
int main(){
printf("%d : %d",sizeof(s1),sizeof(s2));
getchar();
}
我的输出为2:1
请告诉我,这个程序是如何工作的,并且在这里使用:operator(a:1)。
谢谢
答案 0 :(得分:4)
:
定义了bit-field。
在您的示例中,类型为struct st1
的对象在编译器选择的某种排列中使用13位。
编译代码时选择的特定排列会产生占用2个字节的对象。 13位不一定是这些字节中的第一个(或最后一个)。
另一个结构类型(struct st2
)占用(3位)1个字节。
答案 1 :(得分:1)
此处使用的:
运算符指定其中包含的字段的位中的大小。 sizeof()
返回字节边界长度,因此对于第一个,13位(2个字节),以及第二个,1个字节。
答案 2 :(得分:0)
至少有两件事值得注意: