我经常发现自己必须代表一个由非常小的价值观组成的结构。 例如, Foo有4个值, a, b, c, d ,范围从0 to 3 。 通常我不在乎,但有时候,那些结构是 用于紧密的环路中; 他们的价值是读十亿次/秒,这是该计划的瓶颈; 整个程序由大量的数十亿美元组成; 在这种情况下,我发现自己很难决定如何有效地expressionFoo 。 我基本上有4个选项: struct Foo { int a; int b; int c; int d; }; struct Foo { char a; char b; char c; char d; }; struct Foo { char abcd; }; struct FourFoos { int abcd_abcd_abcd_abcd; }; 它们分别使用128,32,8,8比特,每个Foo从稀疏到密集。 […]
我正在使用一个只有2KB SRAM的微控制器,并且迫切需要保存一些内存。 试图找出如何使用位域将8 0值放入单个字节中,但无法完成。 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 } 是什么赋予了?
我已经看到这种模式在C&C ++中使用了很多。 unsigned int flags = -1; // all bits are true 这是一个很好的便携式的方式来完成这个? 或者是使用0xffffffff或0xffffffff更好?
以下C ++代码是什么意思? unsigned char a : 1; unsigned char b : 7; 我猜它创建了两个字符a和b,它们都应该是一个字节长,但是我不知道“:1”和“:7”部分是干什么的。