[英]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 int
, unsigned 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.