我使用cpuid
操作碼來檢索處理器模型和擴展模型的值。我正在使用的文檔說,我必須將擴展模型的值與模型的值連接起來,並且可以獲得正確的模型。連接4位整數
Ex. Model: 2h
Model: Eh
Required Output: 2Eh
這是一個例子,但還有更多的喜歡它。我如何將這兩個數連接在一起(即4位無符號整數)以在C++中接收所需的輸出?
我使用cpuid
操作碼來檢索處理器模型和擴展模型的值。我正在使用的文檔說,我必須將擴展模型的值與模型的值連接起來,並且可以獲得正確的模型。連接4位整數
Ex. Model: 2h
Model: Eh
Required Output: 2Eh
這是一個例子,但還有更多的喜歡它。我如何將這兩個數連接在一起(即4位無符號整數)以在C++中接收所需的輸出?
Shift鍵並添加:
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。
Union - no。
例子:
unsigned char ex_model = 0x2;
unsigned char model = 0xe;
unsigned int i = (ex_model << 4) | model;
你可以在裏面使用一個具有位域結構的聯合。它看起來很糟糕,並且不可移植,但它可能(可能)起作用。 –
@Carl:呃,確切地說。 – TonyK
我想你會使用比特移位操作。你也可以使用聯盟。 – RonaldBarzell