gpt4 book ai didi

c - 我不明白为什么 HIWORD 宏使用 &0xFFFF 掩码?

转载 作者:行者123 更新时间:2023-12-04 10:55:13 24 4
gpt4 key购买 nike

摘自 Charles Petzold 的书:

case WM_SIZE:
cxClient = LOWORD (lParam) ;
cyClient = HIWORD (lParam) ;
return 0 ;

You'll see code like this in virtually every Windows program. LOWORD and HIWORD are macros that are defined in the Windows header file WINDEF.H. If you're curious, the definitions of these macros look like this

#define LOWORD(l) ((WORD)(l))
#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))

The two macros return WORD values that is, 16−bit unsigned



我只会在 HIWORD 定义中使用移位运算符。
像这样:
#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16))

他为什么要掩盖这个值(value)?

有人可以按位向我解释这个吗?

编辑:
HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))


l=0x11223344
((DWORD)(l) >> 16) l becomes 0x00001122
(((DWORD)(l) >> 16) & 0xFFFF))

我这是怎么了?

最佳答案

我猜你的意思是因为 WORD保证是 16 位,那么 (WORD)(x >> 16)无论如何只能是 16 位,因此掩码是无用的。

或者也许是因为 DWORD保证是 32 位无符号,然后 (x >> 16)保证不设置除低 16 位以外的任何位。

早期的目的是WORD将匹配系统的 CPU 字长(即 int )。然而事实证明,写了太多不可移植的代码,它会破坏太多东西来制作 WORD 32 位和 DWORD Win32 出来时是 64 位的。

也许这个宏从未更新过。但是我们可以肯定地说& 0xFFFF不可能引起问题,因此没有理由将其删除。 (不要修复没有坏掉的东西!)

也许保留它甚至是个好主意,以防万一WORD不断增加。

关于c - 我不明白为什么 HIWORD 宏使用 &0xFFFF 掩码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28625729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com