LMS*_*LMS 1 c++ bit-manipulation concatenation
我正在使用cpuid操作码来检索处理器模型和扩展模型的值.我正在使用的文档说我必须将扩展模型的值连接到模型的值,并且我可以得到正确的模型.
Ex. Model: 2h
Model: Eh
Required Output: 2Eh
Run Code Online (Sandbox Code Playgroud)
这是一个例子,但还有更多喜欢它.如何将两个数字连接在一起(这是4位无符号整数)以在C++中接收所需的输出?
转移并添加:
exModel = 0x2;
model = 0xE;
output = (exModel << 4) + model;
Run Code Online (Sandbox Code Playgroud)
由于上面的评论中提到过,你也可以使用union,但我不推荐它 - 它使代码非常不可移植(我认为违反了严格的别名规则):
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;
Run Code Online (Sandbox Code Playgroud)