C++ 串联4位整数

C++ 串联4位整数,c++,concatenation,bit-manipulation,C++,Concatenation,Bit Manipulation,我正在使用cpuid操作码来检索处理器模型和扩展模型的值。我使用的文档说,我必须将扩展模型的值连接到模型的值,这样我才能得到正确的模型 Ex. Model: 2h Model: Eh Required Output: 2Eh 这是一个例子,但还有更多类似的例子。如何将两个数串联起来(4位无符号整数)以接收在C++中的期望输出?< P>移位和添加:< /P> exModel = 0x2; model = 0xE; output = (exModel

我正在使用
cpuid
操作码来检索处理器模型和扩展模型的值。我使用的文档说,我必须将扩展模型的值连接到模型的值,这样我才能得到正确的模型

Ex. Model:         2h
Model:             Eh
Required Output:   2Eh
这是一个例子,但还有更多类似的例子。如何将两个数串联起来(4位无符号整数)以接收在C++中的期望输出?

< P>移位和添加:< /P>
exModel = 0x2;
model = 0xE;

output = (exModel << 4) + model;
移位并添加:

exModel = 0x2;
model = 0xE;

output = (exModel << 4) + model;
轮班-是的

工会-第

例如:

unsigned char ex_model = 0x2;
unsigned char model = 0xe;
unsigned int i = (ex_model << 4) | model;
unsigned char ex_model=0x2;
无符号字符模型=0xe;
无符号整数i=(ex_modelShift-yes

工会-第

例如:

unsigned char ex_model = 0x2;
unsigned char model = 0xe;
unsigned int i = (ex_model << 4) | model;
unsigned char ex_model=0x2;
无符号字符模型=0xe;

unsigned int i=(ex_model,我想你应该使用位移位运算。你可能还可以使用并集。我想你应该使用位移位运算。你可能还可以使用并集。你可以使用带有位域结构的并集。它看起来像地狱,不可移植,但(可能)会工作。你可以使用内部有位域结构的并集。这看起来像地狱,不可移植,但(可能)会工作。写入一个并集域然后从另一个并集域读取违反了严格的别名规则。@ildjarn:我想使用
char
变体时除外。(当然可以使用
char
,只是不确定显式(未)签名版本)。同样,可以将标准布局类类型视为字节序列。@GManNickG:啊,我使用了错误的措辞。真正的问题是(根据§9.6/1)位字段的分配和对齐是由实现定义的,但答案已经涵盖了(“不可移植”)。:-]是的,我当然不建议这样做,但我觉得有必要尝试一下,因为那里有一个答案是“联合-不”。关于联合-我不是说“不可能”。我只是想说“愚蠢-别想了;)”。仅供参考,我有点喜欢“|”而不是“+”…但我想不出任何理由它以这样或那样的方式起作用。嗯……向一个联合域写入数据,然后从另一个域读取数据违反了严格的别名规则。@ildjarn:我想,除非使用
char
变体。(当然可以使用
char
,只是不确定显式(未)签名版本)。同样,可以将标准布局类类型视为字节序列。@GManNickG:啊,我使用了错误的措辞。真正的问题是(根据§9.6/1)位字段的分配和对齐是由实现定义的,但答案已经涵盖了(“不可移植”)。:-]是的,我当然不建议这样做,但我觉得有必要尝试一下,因为那里有一个答案是“联合-不”。关于联合-我不是说“不可能”。我只是说”愚蠢-甚至不要去想它;)”。仅供参考,我有点喜欢“|”而不是“+”…但是我想不出任何理由,不管怎样,它都很重要。我。。。