1

オペコードを使用してcpuid、プロセッサのモデルと拡張モデルの値を取得しています。私が使用しているドキュメントでは、拡張モデルの値をモデルの値に連結する必要があり、正しいモデルを取得できると書かれています。

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

それは一例ですが、もっとたくさんあります。2つの数値(4ビットの符号なし整数)を連結して、C ++で目的の出力を受け取るにはどうすればよいですか?

4

2 に答える 2

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;
于 2012-12-21T21:59:42.303 に答える
1

シフト-はい。

ユニオン-いいえ。

例:

unsigned char ex_model = 0x2;
unsigned char model = 0xe;
unsigned int i = (ex_model << 4) | model;
于 2012-12-21T22:01:07.253 に答える