可能重复:
我正在尝试使用JNA将C结构映射到Java。我偶然发现了一些我从未见过的东西。
struct
定义如下:
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
这样的变量被定义,我不确定这是什么意思。这会影响分配给这个特定变量的字节数吗?
发布于 2010-06-01 22:43:51
此结构指定每个字段的长度(以位为单位)。
这样做的好处是你可以控制sizeof(op)
,如果你小心的话。结构的大小将是内部字段大小的总和。
在您的例子中,op的大小是32位(即,sizeof(op)
是4)。
对于每组无符号xxx:yy;构造,大小总是向上舍入到8的下一个倍数。
这意味着:
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)
我不确定我没记错,但我想我没记错。
发布于 2010-06-01 21:17:52
它声明一个bit field;冒号后面的数字以位为单位给出字段的长度(即,使用多少位来表示它)。
发布于 2010-06-01 21:18:25
unsigned op_type:9;
表示op_type是一个9位的整数变量。
https://stackoverflow.com/questions/2950029
复制相似问题