0

Microsoft HIWORDマクロによると、指定された 32 ビット値から上位ワードを取得します。

マクロの元の定義は次のとおりです。

#define HIWORD(l)  ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff))

たとえば、渡された引数がunsigned long0x12345678の場合、返される結果は0x1234 です。

マクロを次のように書き換えます。

#define MYHIWORD(l) ((WORD)(((DWORD_PTR)(l)) >> 16))

返される結果は同じ値0x1234 です

私の質問:

  • 同じ引数を渡すと、両方のマクロが同じ結果を返すのはなぜですか?

  • 最初のマクロのAND演算 (& 0xffff)の目的は何ですか?

4

1 に答える 1

1

最初のマクロの AND 演算 (& 0xffff) の目的は何ですか?

キャストによって上位ビットが削除されるため、必須ではありません。ビットが削除されているという事実を(読者に)強調するためだけにあると思います。

于 2013-07-07T14:52:16.043 に答える