我正在使用cpuid
操作码来检索处理器模型和扩展模型的值。我正在使用的文档说我必须将扩展模型的值连接到模型的值,并且我可以获得正确的模型。
Ex. Model: 2h
Model: Eh
Required Output: 2Eh
这是一个例子,但还有更多类似的例子。我如何将这两个数字连接在一起(它们是 4 位无符号整数)以在 C++ 中接收所需的输出?
我正在使用cpuid
操作码来检索处理器模型和扩展模型的值。我正在使用的文档说我必须将扩展模型的值连接到模型的值,并且我可以获得正确的模型。
Ex. Model: 2h
Model: Eh
Required Output: 2Eh
这是一个例子,但还有更多类似的例子。我如何将这两个数字连接在一起(它们是 4 位无符号整数)以在 C++ 中接收所需的输出?
移位并添加:
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;
转移 - 是的。
联盟 - 没有。
例子:
unsigned char ex_model = 0x2;
unsigned char model = 0xe;
unsigned int i = (ex_model << 4) | model;