2012-11-18 147 views
2

我不知道該怎麼稱呼它,所以我不知道如何搜索它。這是什麼C語法?

unsigned int odd : 1;

編輯:

要細說,它來自這個片段:

struct bitField { 
    unsigned int odd : 1; 
    unsigned int padding: 15; // to round out to 16 bits 
}; 

我推測這涉及到位,但我仍然不是所有的理解方式。

+1

請在詢問之前先搜索網站,也請給它一個更好的標題。看看你的問題,我在右欄有很多「相關」的問題,這表明它很容易找到一些東西。 –

+0

['unsigned temp:3'是什麼意思?](http://stackoverflow.com/questions/2950029/what-does-unsigned-temp3-mean) –

回答

7

它們是位域。將oddpadding存儲在一個unsigned int(16位)中,其中odd將佔據最低位,並且padding位於unsigned int的高位15位。

+0

哇,一位程序員恰當地命名了他的結構?我排除了這種可能性,並沒有打擾搜索術語* bitfield *。 – Aerovistae

+1

@Aerovistae實際上名稱是「位域」,但程序員可以省略其結構名稱中的短劃線。 –

0

它是:的

  • 1比特 「奇數」(例如,1) 「填充」(例如0000000000000001)
  • 和(可能)的任何其它位輪出unsigned int
  • 15位。在32位的現代32位平臺中,你會在內存中看到另外16個0(但不在結構中)。 (在這種情況下,sizeof返回4)

位域可以節省內存,但可能會將指令添加到計算中。在某些情況下,編譯器可能會忽略您的位域設置。你不能對編譯器如何選擇實際佈局你的位域做任何假設,它可能取決於你的平臺的字節順序。

我使用bitfields的主要目的是當我知道我會做大量的數據複製,而不一定需要大量的計算或參考位域中的特定字段。