2011-08-18 84 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。