我試圖更多地瞭解位字段的工作原理。初始化包含位字段的結構C
考慮下面的代碼: 並假設int是32位
#include <stdio.h>
int main()
{
struct byte
{
int one:1;
};
struct byte var = {3};
printf("%d\n", var.one);
printf("%#x\n", var);
return 0;
}
我得到的輸出是:
-1 0x1
但是我期待看到:
-1 0x3
由於
struct byte var = {3};
給int的4個字節賦值3,不是嗎?
從輸出我實際得到它看起來好像上面的代碼行試圖將值3存儲到1位字段,因此打印0x1
作爲第二個輸出行。
所以我的問題是:
如何這些初始化和任務對整個結構的工作嗎?
另外,爲什麼需要{}
?
你爲什麼期望?您有一個分配給1位寬的字段。編譯器沒有義務保留額外的位。 –
@JonathanGrynspan謝謝你指出。但是,如果編譯器將忽略其餘位,爲什麼需要爲每個位域指定一個類型? – pablorg
嘗試打印'struct byte {TYPE var:1; };'用不同的類型'(unsigned)int/char'。很可能你會發現一個區別。 –