我正在制作的程序需要 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/