元素如何存储在位域中

问题描述 投票:-1回答:1

最近我遇到位域问题

union u
{
    struct
    {
        unsigned char x : 2;
        unsigned int y : 2;
    }p;
    int x;
};
int main()
{
    union u u = { 2 };
    printf("%d\n", u.p.x);
}

实际上按照小字节序规则打印2。位域y应该分配2为什么将2分配给x

c bit-fields
1个回答
0
投票

使用时

union u u = { 2 };

根据您的实际分配成员u.p.x,因为它是struct p的第一个成员>]

初始化联合时,初始化程序列表必须只有一个成员,除非使用指定的初始化程序,否则初始化联合的第一个成员(自C99起)。 cppreference

如果要初始化u.p.y,请使用:

union u u =  { {.y = 2} };

union u ux = { .p={ 0,2 } };
    
© www.soinside.com 2019 - 2024. All rights reserved.