如何将Bitfield专门用于以下目的

时间:2017-05-03 20:11:13

标签: c++ bit-fields

为了学习有效的内存管理,我想知道如何使用单独的Bit字段来统一表示8个bool值的值,以及如何评估和设置每个位。

原因在我自己的程序中,我不会因为数千行而粘贴。 在全局范围内,有一百左右,所有需要的bool,这极大地影响了FPS。

示例:

       uint8_t b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1;

       if (!b0) { 
       // do something
       b0 = true; 
       }

1 个答案:

答案 0 :(得分:2)

只能为数据成员指定位字段。从http://en.cppreference.com/w/cpp/language/bit_field的第一行开始:

  

使用显式大小[...]

声明类数据成员

您需要将位字段包装在结构中。示例:

#include <cstdint>
struct bool_pack {
    uint8_t b0 : 1, b1 : 1, b2 : 1, b3 : 1, b4 : 1, b5 : 1, b6 : 1, b7 : 1;
};

int main()
{
    bool_pack b = {};

    if (!b.b0) {
        // do something
        b.b0 = true;
    }
}

您应该考虑使用更方便的标准库类型std::bitset。示例:

#include <bitset>
int main()
{
    std::bitset<8> b;

    if (!b[0]) {
        // do something
        b[0] = true;
    }
}