#define HIWORD(l)           ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))#define HIBYTE(w)           ((BYTE)(((WORD)(w) >> 8) & 0xFF))
为什么要 & 0xFFFF 和 & 0xFF 啊?多此一举吗?
如果不是,为什么呢?有什么好处?

解决方案 »

  1.   

    这个是把(DWORD)(l)>>16产生的值高16位置0用的,防止使用了算术右移导致了负数的符号位为1结果让高16位为1下面一个同理可得……
      

  2.   

    不过VC++里面对于unsigned类型的位移应该都是逻辑位移才对啊……除非怕有人修改DWORD的typedef,本来是typedef unsigned long DWORD;其实就算改成了有符号类型的位移也应该没问题的……
      

  3.   

    WORD 和 BYTE进行强制类型转换的时候不是舍弃最高位吗? 高位为0或1有什么关系?