首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >结构或联合中的“unsigned temp:3”是什么意思?

结构或联合中的“unsigned temp:3”是什么意思?
EN

Stack Overflow用户
提问于 2010-06-01 21:16:29
回答 4查看 16.4K关注 0票数 62

可能重复:

What does this C++ code mean?

我正在尝试使用JNA将C结构映射到Java。我偶然发现了一些我从未见过的东西。

struct定义如下:

代码语言:javascript
复制
struct op 
{
    unsigned op_type:9;  //---> what does this mean? 
    unsigned op_opt:1; 
    unsigned op_latefree:1; 
    unsigned op_latefreed:1; 
    unsigned op_attached:1; 
    unsigned op_spare:3; 
    U8 op_flags; 
    U8 op_private;
};

你可以看到像unsigned op_attached:1这样的变量被定义,我不确定这是什么意思。这会影响分配给这个特定变量的字节数吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-01 22:43:51

此结构指定每个字段的长度(以位为单位)。

这样做的好处是你可以控制sizeof(op),如果你小心的话。结构的大小将是内部字段大小的总和。

在您的例子中,op的大小是32位(即,sizeof(op)是4)。

对于每组无符号xxx:yy;构造,大小总是向上舍入到8的下一个倍数。

这意味着:

代码语言:javascript
复制
struct A
{
    unsigned a: 4;    //  4 bits
    unsigned b: 4;    // +4 bits, same group, (4+4 is rounded to 8 bits)
    unsigned char c;  // +8 bits
};
//                    sizeof(A) = 2 (16 bits)

struct B
{
    unsigned a: 4;    //  4 bits
    unsigned b: 1;    // +1 bit, same group, (4+1 is rounded to 8 bits)
    unsigned char c;  // +8 bits
    unsigned d: 7;    // + 7 bits
};
//                    sizeof(B) = 3 (4+1 rounded to 8 + 8 + 7 = 23, rounded to 24)

我不确定我没记错,但我想我没记错。

票数 44
EN

Stack Overflow用户

发布于 2010-06-01 21:17:52

它声明一个bit field;冒号后面的数字以位为单位给出字段的长度(即,使用多少位来表示它)。

票数 19
EN

Stack Overflow用户

发布于 2010-06-01 21:18:25

代码语言:javascript
复制
unsigned op_type:9;

表示op_type是一个9位的整数变量。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2950029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档