首先,是否有可能這樣做? 如果是,我在下面的聲明中做錯了什麼?有沒有辦法用位域聲明無符號的固定寬度整數?
struct mybitfields
{
uint8_t a : 4;
uint16_t c : 12;
} test;
首先,是否有可能這樣做? 如果是,我在下面的聲明中做錯了什麼?有沒有辦法用位域聲明無符號的固定寬度整數?
struct mybitfields
{
uint8_t a : 4;
uint16_t c : 12;
} test;
雖然你在做什麼是可能,它不是便攜式:C99標準說位字段基本類型必須是_Bool
,signed int
,或unsigned int
,從而實現自定義類型爲與位域一起使用(C90要求在無符號的int
上簽名爲位域的基本類型;不允許其他類型)。
請參閱this answer,以參考適用於C99和C90標準的章節。
如果你的目標是定義一個大小小於unsigned int
的位域的struct
,那麼最好使用位移來實現可移植性。
您的代碼將被大多數編譯器接受,但嚴格來說,位域的基本類型必須是(signed/unsigned) int
。
uint8_t
是unsigned char
一個typedef,並uint16_t
可能是用於unsigned short
一個typedef,並從這些類型由位域不合格。
這聽起來有點矛盾。你想要做什麼?爲什麼你需要你的4位整數是16位寬? – Medinoc 2013-04-22 21:25:17
給定的代碼有什麼問題? – Arun 2013-04-22 21:26:22
我有一個解決我的問題,只是想知道這是否可能在所有或不? – Gokul 2013-04-22 21:30:38