簡體   English   中英

位字段如何與字符類型一起使用?

[英]How does a bit field work with character types?

   struct stats
   {
       char top         : 1; 
       char bottom      : 1;
       char side        : 2;
   } MyStat;  

我用整數看過這種格式,但上面的char位字段是如何工作的以及它代表什么?

謝謝。

字符串字段的工作方式與int相同,只是基本類型是8位寬,而不是32位。 因此,您將獲得一個結構統計信息,其大小為1個字節,以及3個成員變量,總共占用4位。

Bitfields應該使用類型signed intunsigned int或來自<stdbool.h> bool聲明。 其他類型可能合法也可能不合法(取決於平台),但要注意簽名 - 普通int可能被認為是無符號的位域。

也就是說,它可能是編譯器的一個提示,即struct的對齊應該是1而不是sizeof(int) 並且允許編譯器接受char並為其分配這樣的含義。

根據C99 6.7.2.1/9,

位字段被解釋為由指定位數組成的有符號或無符號整數類型。 如果將值0或1存儲到_Bool類型的非零寬度位字段中,則位字段的值應等於存儲的值。

和腳注:

如上面6.7.2中所述,如果使用的實際類型說明符是int或定義為int的typedef-name,則無論位字段是有符號還是無符號,它都是實現定義的。

它只是定義了您將使用的變量的大小。

char
int

標准不支持這一點(典型的使用是unsigned int),但這是一個很好的嘗試:)

re:你的查詢,這是實現者嘗試為他們的位域使用更少的內存(char而不是unsigned int)

此外,從Atmel ,我們得到:

在C標准中,只有“unsigned(int)”和“int”是位域成員可接受的數據類型。 有些編譯器允許“unsigned char”........

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM