我正在研发一个只有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
}
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?
Car*_*rum 112
所有的bitfield成员都是带符号的1位整数.在二元补语系统中,这意味着它们只能代表0或者-1.使用uint8_t,如果你想0和1:
struct Bits
{
uint8_t b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1;
};
Run Code Online (Sandbox Code Playgroud)