【发布时间】:2019-09-15 10:21:43
【问题描述】:
我试图通过按键的简单动作找到对这些数字及其含义的任何合乎逻辑的解释。GetAsyncKeyState(VK_SHIFT) & 0x8000;。
还有哪些值可以代替0x8000,它们与按键有什么关系?
【问题讨论】:
我试图通过按键的简单动作找到对这些数字及其含义的任何合乎逻辑的解释。GetAsyncKeyState(VK_SHIFT) & 0x8000;。
还有哪些值可以代替0x8000,它们与按键有什么关系?
【问题讨论】:
GetAsyncKeyState 根据文档返回
如果函数成功,则返回值指定自上次调用 GetAsyncKeyState 以来是否按下了键,以及该键当前是向上还是向下。如果设置了最高有效位,则密钥向下...
如果你把数字 0x8000 用二进制写出来,它将是
10000000 00000000 00000000 00000000
最左边的那个位被称为“最高位”
& 运算符所做的是按位 AND,这意味着只有在 & 两侧的 1 位才会出现在结果中。
执行& 0x8000 是一种屏蔽(忽略)除最高有效位之外的所有位的方法。然后,您可以检查此操作的结果是 != 0,这将根据您传递给函数的键是否被按下而返回 true 或 false。
由于您的代码标记为 c#,但此函数来自本机 windows 函数,因此您可能已经看到的示例可能看起来像
if (GetAsyncKeyState(VK_SHIFT) & 0x8000) {
...
}
在 C++ 中,if 语句中隐式检查 != 0,因此任何非零值都被视为真。
【讨论】: