什么:在C中意味着什么?

时间:2014-02-13 20:24:07

标签: c struct qemu bit-fields

在浏览QEMU的源代码包时,我在exec.c文件中找到了:

struct PhysPageEntry {
    /* How many bits skip to next level (in units of L2_SIZE). 0 for a leaf. */
    uint32_t skip : 6;
     /* index into phys_sections (!skip) or phys_map_nodes (skip) */
    uint32_t ptr : 26;
};

我想知道:运营商意味着什么。我在C语法定义列表中找不到它。

4 个答案:

答案 0 :(得分:8)

这是一个用位字段声明的结构,结构成员称为位字段 A 位字段使用结构声明进行设置,该结构声明标记每个字段并确定其宽度。上述定义使PhysPageEntry分别包含一个6位字段和一个26位字段成员,即skipptr。它的签名是

struct
{
      type [member_name] : width ;
};  

这里 width 是位字段中的位数。 宽度必须小于或等于指定类型的位宽

答案 1 :(得分:2)

struct PhysPageEntry声明两个bit fields skipptr。这基本上是允许结构有效地打包这些奇数长度(以位为单位)。如果作者没有这样做,结构可能是8字节长(在32位架构上)。

答案 2 :(得分:1)

表示位数。它主要用于工会:

struct byte {
  unsigned a : 1;
  unsigned b : 1;
  unsigned c : 1;
  unsigned d : 1;
  unsigned e : 1;
  unsigned f : 1;
  unsigned g : 1;
  unsigned h : 1;
};

您也可以阅读this以便更好地理解。

答案 3 :(得分:1)

它叫做bitfield。在结构或联盟内 声明,这声明'skip'是6位宽的“位字段”。它们将被用于结构内部。如果有帮助请投票正确!