串联的4位整数

Concatenating 4-bit integers

本文关键字:整数 4位      更新时间:2023-10-16

我正在使用 cpuid opcode检索处理器模型和扩展模型的值。我正在使用的文档说我必须将扩展模型的值与模型的价值相连,我可以获得正确的模型。

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

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

shift and add:

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;

shift -yes。

联合 - 否。

示例:

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