相关疑难解决方法(0)

2454
推荐指数
25
解决办法
111万
查看次数

单字节布尔.为什么?

在C++中,为什么bool需要一个字节来存储true或false,其中只有一个位足够,例如0表示false,1表示true表示?(为什么Java也需要一个字节?)

其次,使用以下内容会更安全多少?

struct Bool {
    bool trueOrFalse : 1;
};
Run Code Online (Sandbox Code Playgroud)

第三,即使它是安全的,上述现场技术真的会有所帮助吗?因为我听说我们在那里节省空间,但是编译器生成的代码访问它们比访问基元所生成的代码更大更慢.

c++ java performance primitive boolean

41
推荐指数
4
解决办法
6911
查看次数

将位字段转换为int

我有这样声明的位字段:

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表示整个字).

非常感谢.

c bit-fields

14
推荐指数
2
解决办法
2万
查看次数

C/C++位域与逐位运算符相比,单位输出位更快,更好,更便携?

我需要以这种方式在一个字节中打包一些位:

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更整洁.但哪个选项更快?我知道速度差异不会太大,如果有的话,但我可以使用其中任何一个,如果一个更快,更好.
另一方面,我已经读过,不保证位域不能跨平台排列相同的位,我希望我的代码可以移植.

注意:如果您打算回答"个人资料",我会,但是因为我很懒,如果有人已经有了答案,那就更好了.
代码可能有误,如果你愿意,可以纠正我,但请记住这个问题的重点是什么,请尝试回答.

c c++ bit-manipulation bit-fields

13
推荐指数
5
解决办法
7730
查看次数

C++ 联合/结构位域实现和可移植性

我有一个包含 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++ struct unions c++11

2
推荐指数
1
解决办法
159
查看次数