通过C宏检索高阶词的正确方法

时间:2013-07-07 14:42:51

标签: c c-preprocessor

根据microsoft HIWORD宏从指定的32位值中检索高阶字。

宏的原始定义是:

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

例如,如果传递的参数是unsigned long 0x12345678 ,则返回结果为 0x1234

重写宏如下:

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

返回的结果与 0x1234

的值相同

我的问题:

  • 当传递相同的参数时,为什么两个宏都返回相同的结果?

  • 第一个宏中AND操作(& 0xffff)的目的是什么?

1 个答案:

答案 0 :(得分:1)

  

第一个宏中AND操作(& 0xffff)的目的是什么?

没有必要,因为演员阵容将消除高阶位。我想这只是为了突出(向读者)删除位的事实。