我有一部分代码包含以下功能:
void Keyboard(int key)
{
switch (key) {
case GLFW_KEY_A: m_controlState |= TDC_LEFT; break;
case GLFW_KEY_D: m_controlState |= TDC_RIGHT; break;
case GLFW_KEY_W: m_controlState |= TDC_UP; break;
case GLFW_KEY_S: m_controlState |= TDC_DOWN; break;
default: Test::Keyboard(key);
}
}
void KeyboardUp( int key)
{
switch (key) {
case GLFW_KEY_A: m_controlState &= ~TDC_LEFT; break;
case GLFW_KEY_D: m_controlState &= ~TDC_RIGHT; break;
case GLFW_KEY_W: m_controlState &= ~TDC_UP; break;
case GLFW_KEY_S: m_controlState &= ~TDC_DOWN; break;
default: Test::Keyboard(key);
}
}
我知道开关盒是什么,但我不明白这些部件的作用。
m_controlState |= TDC_LEFT
m_controlState &= ~TDC_LEFT
m_controlState
是一个整数。 GFLW_KEY
也指一个 int 值。
有人可以解释这些部分的作用吗?一个带有输入值和结果的例子会很好。
不等于链接的问题,因为我还询问 &=
原文由 Sven van den Boogaart 发布,翻译遵循 CC BY-SA 4.0 许可协议
此外,我认为应该解释这些运算符的作用和使用方式。
m_controlState 用作标志,这意味着它以二进制形式包含按下了哪些键。例如,如果像这样选择 tds 常量的值:
然后在单个整数中,您可以存储设置了哪些选项的信息。为此,您只需检查每个设置对应的位是 1 还是 0。
因此,要设置 TDS_LEFT 选项,您必须将当前状态与 0x00001(即 TDS_LEFT)进行 OR,所以在代码中
这与
要取消设置 TDS_LEFT 选项,您必须将其与 ~TDS_LEFT 结合。所以
这与以下内容相同:
您还可以查看: How to use enums as flags in C++? .希望这能让它更清楚。