2011-08-18 73 views
1
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:1C尺寸结构

你会告诉我,这是如何计划的运作方式和什么用的:运算符(1)在这里。

谢谢

+0

你的'printf'语句不正确,一个好的编译器可能会给你一个警告......'size_t'的格式说明符是'%zu','size_t'的大小'z'和'u'因为这是一个无符号值。 –

回答

4

:限定bit-field

在您的例子,struct st1类型的对象在由所述编译器选择一些装置使用13位。

时编译的代码所选择的特定布置起源占用2个字节的对象。的13位不一定是那些字节的第一(或最后)。

其他结构类型(struct st2)占据(3个比特退出)1个字节。

1

:运营商那里使用指定位大小字段包含有。 sizeof()返回字节边界的长度,所以对于第一,13位(2个字节),和用于所述第二,1个字节。

0

有至少价值两件事情在这里指出:

  1. 每个对象都必须是可寻址的,这意味着它至少会占据一个字符的大小。
  2. 的实现可以自由地添加填充对准或其他问题,因为它认为合适的。 IOW,含有两个整数一个结构不能保证在尺寸等于sizeof(int)的* 2。