有关位运算的一则问题
今天编程时用到了这几个宏
#define MAKEWORD(a, b) ((WORD)(((BYTE)(a)) | ((WORD)((BYTE)(b))) << 8))
#define MAKELONG(a, b) ((LONG)(((WORD)(a)) | ((DWORD)((WORD)(b))) << 16))
#define LOWORD(l) ((WORD)(l))
#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))
#define LOBYTE(w) ((BYTE)(w))
#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))
我想问一下那个HIBYTE(w)为什么要这样写。LOBYTE(w)直接拷贝w的低字节就行了,很好理解。如果要拷贝高字节的话,w右移8位不就可以了吗?为什么还要和0xFF与一下呢?一个BYTE类型的值和0xFF与好像是不变的吧!