【发布时间】:2015-07-03 13:01:59
【问题描述】:
我正在开发一个只有 2KB SRAM 的微控制器,并且迫切需要节省一些内存。试图弄清楚如何使用位域将 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
}
什么给了?
【问题讨论】:
-
你看过使用
std::bitset -
你可以使用 unsigned 代替 int
-
实际上,抛弃 C++ 并坚持使用 C 会显着减少内存使用量。没有那个,你的代码很好。 -1 是“真”。正如 Dieter 建议的那样,您也可以将您的字段设为无符号。
-
@LeeDanielCrocker,单独使用
b.b1将评估为 true,但请注意b.b1 == true。问我怎么知道.... -
位域的定义应该使用'unsigned int8,而不是int8,否则每个位都会尝试成为符号位。导致困难。
标签: c++ bit-fields