我正在制作的程序需要 HIDWORD 宏,并在这里找到了这个:http: //gnuwin32.sourceforge.net/compile.html
我很困惑的是为什么&0xFFFFFFFF
它的末尾有一个?
#define HIDWORD(l) ((DWORD)(((DWORDLONG)(l)>>32)&0xFFFFFFFF))
这如何以任何方式修改此宏的输出?
我正在制作的程序需要 HIDWORD 宏,并在这里找到了这个:http: //gnuwin32.sourceforge.net/compile.html
我很困惑的是为什么&0xFFFFFFFF
它的末尾有一个?
#define HIDWORD(l) ((DWORD)(((DWORDLONG)(l)>>32)&0xFFFFFFFF))
这如何以任何方式修改此宏的输出?
我认为它没有任何实际效果 -(DWORD)
表达式的最终操作将强制结果为 32 位的强制转换。
强制转换强制移位操作对(DWORDLONG)
无符号值起作用,因此不会将“符号位”转移到中间结果中。但是,由于操作数可能是 64 位,因此在比第 31 位更高的位置可能仍然有非零位。该& 0xFFFFFFFF
操作会将这些位清零,但强制转换也是如此(DWORD)
。
但这也不痛。有人可能会争辩说,它使宏的意图更清晰(也许对你来说除外 - 开个玩笑!)。
假设这些是无符号类型,并且假设DWORD
是 32 位和DWORDLONG
64 位,那么从技术上讲它什么都不做。
也许它只是为签名类型复制和粘贴类似宏的代码?
或者也许我注意到的一个假设不成立。
干杯&hth.,