“&0xFFFFFFFF”在这个 HIDWORD 宏中有什么作用

小太郎*_*小太郎 4 c++ macros dword

我需要为我正在制作的程序使用 HIDWORD 宏,并在这里找到了这个:http ://gnuwin32.sourceforge.net/compile.html

我很困惑的是为什么&0xFFFFFFFF在它的末尾有一个?

#define HIDWORD(l) ((DWORD)(((DWORDLONG)(l)>>32)&0xFFFFFFFF))
Run Code Online (Sandbox Code Playgroud)

这如何以任何方式修改此宏的输出?

Mic*_*urr 5

我认为它没有任何实际效果 -(DWORD)无论如何,表达式的最终操作都会强制结果为 32 位。

所述(DWORDLONG)铸造的力变速操作作用于无符号值,所以没有“符号位”将被移位到中间结果。但是,由于操作数可能是 64 位,因此在比位 31 更高的位置可能仍然存在非零位。& 0xFFFFFFFF操作会将这些位清零,但转换也会如此(DWORD)

但它也不痛。有人可能会争辩说,它使宏的意图更加清晰(除了你,也许 - 开个玩笑!)。