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

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

#define HIDWORD(l) ((DWORD)(((DWORDLONG)(l)>>32)&0xFFFFFFFF))

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

最佳答案

我认为它没有任何实际效果 - (DWORD) 转换的
无论如何,表达式的最终运算将强制结果为 32 位。
(DWORDLONG) 强制转换操作对无符号值起作用,因此不会将“符号位”移入中间结果。但是,由于操作数可能是 64 位,因此在比位 31 更高的位置可能仍然存在非零位。 & 0xFFFFFFFF 操作会将这些位清零,但 (DWORD) 也会如此。

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

关于c++ - "&0xFFFFFFFF"在这个 HIDWORD 宏中有什么作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4447009/

10-12 16:04