我需要为我正在制作的程序使用 HIDWORD 宏,并在这里找到了这个:http ://gnuwin32.sourceforge.net/compile.html
我很困惑的是为什么&0xFFFFFFFF在它的末尾有一个?
#define HIDWORD(l) ((DWORD)(((DWORDLONG)(l)>>32)&0xFFFFFFFF))
Run Code Online (Sandbox Code Playgroud)
这如何以任何方式修改此宏的输出?
我认为它没有任何实际效果 -(DWORD)无论如何,表达式的最终操作都会强制结果为 32 位。
所述(DWORDLONG)铸造的力变速操作作用于无符号值,所以没有“符号位”将被移位到中间结果。但是,由于操作数可能是 64 位,因此在比位 31 更高的位置可能仍然存在非零位。& 0xFFFFFFFF操作会将这些位清零,但转换也会如此(DWORD)。
但它也不痛。有人可能会争辩说,它使宏的意图更加清晰(除了你,也许 - 开个玩笑!)。