【问题标题】:In C++ what is the proper term for splitting an int into bits在 C++ 中,将 int 拆分为位的正确术语是什么
【发布时间】:2011-02-11 01:33:24
【问题描述】:

我在一些 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。至少我是这么想的。

谢谢。

【问题讨论】:

  • 很好,这是谷歌的问题之一,搜索你需要线索的域名或名称的东西^^

标签: c++ struct


【解决方案1】:
  1. 它们被称为位域 (MSVC) (GCC)
  2. 字节序通常是指字节顺序。但是位顺序可能很重要,请参阅上面的链接。
  3. 在您的情况下,它们表现为无符号整数 (uint32_t)。

【讨论】:

    【解决方案2】:

    一般来说,从较大的二进制整数表示中选择几个位的术语是掩码

    【讨论】:

      【解决方案3】:

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

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

      字节序对于大于 1 字节的数据类型的一部分确实很重要。

      【讨论】:

      • 字节序也会影响位域的内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 2015-05-29
      • 1970-01-01
      • 2011-12-28
      相关资源
      最近更新 更多