2

I have no idea what to call it, so I have no idea how to search for it.

unsigned int odd : 1;

Edit:

To elaborate, it comes from this snippet:

struct bitField {
    unsigned int odd : 1;
    unsigned int padding: 15; // to round out to 16 bits
};

I gather this involves bits, but I'm still not all the way understanding.

4

3 回答 3

7

它们是位域。odd并将padding存储在一个unsigned int(16 位)中,其中odd将占用最低位和padding高 15 位unsigned int

于 2012-11-18T06:29:49.220 回答
6

It's a bitfield - Check the C FAQ.

于 2012-11-18T06:27:00.897 回答
0

它的:

  • 1 位“奇数”(例如 1)
  • 15 位“填充”(例如 0000000000000001)
  • 和(可能)任何其他位使unsigned int. 在现代 32 位平台中,这是 32 位,您会在内存中看到另外 16 个 0(但不在结构中)。(在这种情况下sizeof返回 4)

位域可以节省内存,但可能会为计算添加指令。在某些情况下,编译器可能会忽略您的位域设置。您不能对编译器将如何选择实际布局您的位字段做出任何假设,这可能取决于您平台的字节序。

我使用位域的主要目的是当我知道我将对数据进行大量复制,而不必对位域中的特定字段进行大量计算或引用时。

于 2012-11-18T07:11:23.003 回答