1

我正在使用cpuid操作码来检索处理器模型和扩展模型的值。我正在使用的文档说我必须将扩展模型的值连接到模型的值,并且我可以获得正确的模型。

Ex. Model:         2h
Model:             Eh
Required Output:   2Eh

这是一个例子,但还有更多类似的例子。我如何将这两个数字连接在一起(它们是 4 位无符号整数)以在 C++ 中接收所需的输出?

4

2 回答 2

5

移位并添加:

exModel = 0x2;
model = 0xE;

output = (exModel << 4) + model;

由于在上面的评论中提到过,你也可以使用联合,但我不推荐它——它使代码非常不可移植(我认为违反了严格的别名规则):

union myUnion
{
    unsigned char output;
    struct
    {
        unsigned char model   : 4; // the order of these two fields
        unsigned char exModel : 4; // is system dependent
    };
};

union myUnion u;

u.exModel = 0x2;
u.model = 0xE;

output = u.output;
于 2012-12-21T21:59:42.303 回答
1

转移 - 是的。

联盟 - 没有。

例子:

unsigned char ex_model = 0x2;
unsigned char model = 0xe;
unsigned int i = (ex_model << 4) | model;
于 2012-12-21T22:01:07.253 回答