[英]Initilizing structures containing bit-fields in 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};
將值3分配給int的4個字節,不是嗎?
從輸出中我實際上得到的結果似乎是上述代碼行試圖將值3存儲到1位字段中,因此將0x1
打印為第二條輸出行。
所以我的問題是:
這些對整個結構的初始化和分配如何工作?
另外,為什么{}
必需的?
int one:1;
這樣,您就可以聲明只有一個位用於sign
位的整數。 所以您看到-1
。
如果要存儲3(011),則總共需要2(數據)+1(符號)位。 因此,應為:
struct byte
{
int one:3;
};
或使用unsigned int。
struct byte
{
unsigned int one:2;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.