连接4位整数

时间:2012-12-21 21:58:09

标签: c++ concatenation bit-manipulation

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

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

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

转变 - 是的。

联盟 - 没有。

示例:

unsigned char ex_model = 0x2;
unsigned char model = 0xe;
unsigned int i = (ex_model << 4) | model;