2011-02-10 33 views
2

我喜歡一些C++代碼的東西看到正確的術語:在C++中什麼是分裂一個int爲位

// Header 
struct SomeStruct { 
    uint32_t nibble1:4, bitField1:1, bitField2:1, bitField3:1, bitField4:1, 
      padding:11, field5Bits:5, byteField:8; 
}; 

這是什麼叫什麼?我之前通常喜歡在谷歌之前問這裏,但我不知道甚至要輸入什麼。我希望在endianness時能夠理解這一點 - 是位順序還是需要考慮,還是僅僅是字節順序?此外,每個字段的類型是什麼 - bitFieldX應該是一個布爾值,而field5Bits應該是一個uint8_t。至少這是我的想法。

謝謝。

+0

可以問一下,這是Google的一個問題,要搜索一些您需要對其域名或名稱提供線索的東西^^ – 2011-02-10 16:23:38

回答

6
  1. 他們被稱爲位域(MSVC)(GCC
  2. 字節序通常是指字節的順序。但是,位順序可能很重要,請參閱上面的鏈接。
  3. 它們在你的情況下表現爲無符號整型(uint32_t)。
1

通常,用於從較大的二進制整數表示中選擇幾個位的術語是掩蔽

1

你發佈的是一個打包結構。結構中的元素與其他人所發佈的一樣,被稱爲位域。這些通常用於表示通信協議結構,其中協議指定小於一個字節的字段,或者不與通常會發生的字節,半字或字對齊對齊。

由於只列出了一種類型,所以結構的每個成員都是相同的類型uint_32。

Endity對於作爲大於1個字節的數據類型的一部分的anthing很重要。

+0

Endianess也會影響位域的內容。 – Bill 2011-02-10 19:30:44

相關問題