c++ - 在 1 个字节内存储 8 个逻辑真/假值?

标签 c++ bit-fields

我正在开发一个只有 2KB SRAM 的微 Controller ,并且迫切需要节省一些内存。试图弄清楚如何使用位域将 8 个 0/1 值放入单个字节,但无法完全解决。

struct Bits
{
    int8_t b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1;
};

int main(){
    Bits b;
    b.b0 = 0;
    b.b1 = 1;

    cout << (int)b.b0; // outputs 0, correct
    cout << (int)b.b1; // outputs -1, should be outputting 1
}

什么给了?

最佳答案

所有位域成员都是有符号的 1 位整数。在二进制补码系统中,这意味着它们只能表示 0-1。如果需要 01,请使用 uint8_t:

struct Bits
{
    uint8_t b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1;
};

关于c++ - 在 1 个字节内存储 8 个逻辑真/假值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29855708/

相关文章:

.net - 我在哪里可以找到 CorFlags 值的每一位含义的引用?

c++ - 在 OpenCV 中计算 3D 梯度方向

C++:直接使用派生类型的模板方法模式

c++ - 成员结构位域元素的初始化列表初始化导致 IAR ARM 中的错误

c - 结构大小问题,要求不需要的内存?

关于 C 中位域排序语义的说明

c++ - 在构造函数中传递const引用时,如何强制编译器不接受右值

c++ - 如何防止系统在没有窗口的情况下关闭?

c++ - 如何检查mpl::vector_c中的值?

c++ - 句柄的可移植位字段