在C ++中,将int拆分为多数位的正确术语是什么

时间:2011-02-10 15:47:32

标签: c++ struct

我在一些C ++代码中看到的内容如下:

// Header
struct SomeStruct {
    uint32_t nibble1:4, bitField1:1, bitField2:1, bitField3:1, bitField4:1,
             padding:11, field5Bits:5, byteField:8;
};

这叫什么?在问这里之前我通常喜欢谷歌,但我不知道甚至输入什么。我希望在字节顺序时能理解这一点 - 有点顺序要考虑还是字节顺序?另外,每个字段的类型是什么 - bitFieldX应该是bool,而field5Bits应该是uint8_t。至少这就是我的想法。

感谢。

3 个答案:

答案 0 :(得分:6)

  1. 它们被称为位域(MSVC)(GCC
  2. Endianess通常是指字节的顺序。但是位顺序可能很重要,请参阅上面的链接。
  3. 在你的情况下,它们表现为unsigned int(uint32_t)。

答案 1 :(得分:1)

通常,从较大的二进制整数表示中选择几个位的术语是 masking

答案 2 :(得分:1)

您发布的内容是打包结构。结构中的元素被称为位域,就像其他人发布的那样。这些通常用于表示通信协议结构,其中协议指定小于一个字节的字段,或者不与通常发生的字节,半字或字对齐对齐。

由于只列出了一种类型,因此结构的每个成员都是相同的类型uint_32。

Endianess对于作为数据类型大于1个字节的一部分的anthing非常重要。