在C++中,为什么bool需要一个字节来存储true或false,其中只有一个位足够,例如0表示false,1表示true表示?(为什么Java也需要一个字节?)
其次,使用以下内容会更安全多少?
struct Bool {
bool trueOrFalse : 1;
};
Run Code Online (Sandbox Code Playgroud)
第三,即使它是安全的,上述现场技术真的会有所帮助吗?因为我听说我们在那里节省空间,但是编译器生成的代码访问它们比访问基元所生成的代码更大更慢.
我有这样声明的位字段:
typedef struct morder {
unsigned int targetRegister : 3;
unsigned int targetMethodOfAddressing : 3;
unsigned int originRegister : 3;
unsigned int originMethodOfAddressing : 3;
unsigned int oCode : 4;
} bitset;
Run Code Online (Sandbox Code Playgroud)
我也有int数组,我想从这个数组得到int值,它表示这个位字段的实际值(实际上是某种机器字,我有它的部分,我想要int表示整个字).
非常感谢.
我需要以这种方式在一个字节中打包一些位:
struct
{
char bit0: 1;
char bit1: 1;
} a;
if( a.bit1 ) /* etc */
Run Code Online (Sandbox Code Playgroud)
要么:
if( a & 0x2 ) /* etc */
Run Code Online (Sandbox Code Playgroud)
从源代码的清晰度来看,对我来说很明显,bitfields更整洁.但哪个选项更快?我知道速度差异不会太大,如果有的话,但我可以使用其中任何一个,如果一个更快,更好.
另一方面,我已经读过,不保证位域不能跨平台排列相同的位,我希望我的代码可以移植.
注意:如果您打算回答"个人资料",我会,但是因为我很懒,如果有人已经有了答案,那就更好了.
代码可能有误,如果你愿意,可以纠正我,但请记住这个问题的重点是什么,请尝试回答.
我有一个包含 uint16 和一个结构的联合,如下所示:
union pData {
uint16_t w1;
struct {
uint8_t d1 : 8;
uint8_t d2 : 4;
bool b1 : 1;
bool b2 : 1;
bool b3 : 1;
bool b4 : 1;
} bits;
};
Run Code Online (Sandbox Code Playgroud)
我的同事说这个便携有问题,但我不确定我买这个。可以请一些人解释(尽可能简单)这里的“错误”是什么?
c++ ×4
c ×3
bit-fields ×2
boolean ×1
c++11 ×1
java ×1
performance ×1
primitive ×1
struct ×1
unions ×1