我正在开发一个只有 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
。如果需要 0
和 1
,请使用 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/