Обновление
Шквал голосов подтолкнул меня к дальнейшему расследованию. Вот как работают возвращаемые значения (в шестнадцатеричном формате) GetKeyState
. Я не совсем понимаю свойство переключения ключа, например k
, но я предполагаю, что есть какое-то состояние по умолчанию, из которого оно переключается.
0 Default State, key up
ff80 Default state, key down
1 Toggled, key up
ff81 Toggled, key down
Таким образом, 0xff80
добавляется всякий раз, когда необходимо установить бит старшего разряда, и бит младшего разряда имеет смысл. Итак, теперь мы знаем, почему работает подход 0x80
- поскольку бит старшего разряда младшего байта также установлен!
Старый ответ
GetKeyState возвращает SHORT
, где, если старший бит равен 1
, это означает, что ключ активен. Операция побитового И с 0x80
просто проверяет, равен ли этот бит 1
, поскольку в двоичном формате 0x80
равен 10000000
.
Следовательно, оператор GetKeyState('K') & 0x80
вернет 0x80
, если старший бит значения, возвращаемого GetKeyState('K')
, равен 1
и 0
, если старший бит 0
.