Mun*_*med 57 c c++ colon bit-fields
可能重复:
这个C++代码是什么意思?
我正在尝试使用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;
};
Run Code Online (Sandbox Code Playgroud)
你可以看到一些变量被定义为unsigned op_attached:1
,我不确定这意味着什么.这会影响为这个特定变量分配的字节数吗?
utn*_*tim 42
此构造指定每个字段的位长度.
这样做的好处是sizeof(op)
,如果你小心的话,你可以控制它.结构的大小将是内部字段大小的总和.
在您的情况下,op的大小是32位(即,sizeof(op)
是4).
对于每组无符号xxx,大小总是向上舍入到8的下一个倍数:yy; 构造.
这意味着:
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)
Run Code Online (Sandbox Code Playgroud)
我不确定我是否正确记得,但我认为我做对了.
归档时间: |
|
查看次数: |
14135 次 |
最近记录: |