簡體   English   中英

初始化C中包含位域的結構

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

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