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

时间:2010-06-01 13:16:29

标签: c++ c bit-fields colon

  

可能重复:
  What does this C++ code mean?

我正在尝试使用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,我不确定这意味着什么。这会影响为这个特定变量分配的字节数吗?

4 个答案:

答案 0 :(得分:41)

此构造指定每个字段的位长度。

这样做的好处是,如果您小心,可以控制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)

我不确定我是否正确记得,但我认为我做对了。

答案 1 :(得分:19)

宣布bit field;冒号后面的数字以位为单位给出字段的长度(即,用多少位代表它)。

答案 2 :(得分:6)

unsigned op_type:9;

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

答案 3 :(得分:4)

整数类型的冒号修饰符指定int应占用的位数。