C ++的含义| =和& = [英] C++ meaning |= and &=

查看:132
本文介绍了C ++的含义| =和& =的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一部分代码包含以下功能:

  void键盘(int键)
{
开关(键){
case GLFW_KEY_A:m_controlState | = TDC_LEFT;打破;
case GLFW_KEY_D:m_controlState | = TDC_RIGHT;打破;
case GLFW_KEY_W:m_controlState | = TDC_UP;打破;
case GLFW_KEY_S:m_controlState | = TDC_DOWN;打破;
默认值:Test :: Keyboard(key);
}
}

void KeyboardUp(int key)
{
switch(key){
case GLFW_KEY_A:m_controlState& =〜 TDC_LEFT;打破;
case GLFW_KEY_D:m_controlState& =〜TDC_RIGHT;打破;
case GLFW_KEY_W:m_controlState& =〜TDC_UP;打破;
case GLFW_KEY_S:m_controlState& =〜TDC_DOWN;打破;
默认值:Test :: Keyboard(key);
}
}

我知道开关盒是什么,但我不明白这些部分的作用。

  m_controlState | = TDC_LEFT 
m_controlState& =〜TDC_LEFT

m_controlState是一个整数。



有人可以解释这些部分如何用输入值作为示例,结果会很好。

解决方案

我也应该解释一下这些运算符的工作方式和用法。



m_controlState用作标志,这意味着它以二进制形式包含按下了哪些键。
例如,如果tds常量的值选择如下:

  TDS_LEFT = 0x00001 
TDS_RIGH = 0x01<< 2 = 0x00010
TDS_UP = 0x01<< 3 = 0x00100
TDS_DOWN = 0x01<< 4 = 0x01000

然后,您可以在单个整数中存储设置了哪些选项的信息。为此,您只需要检查每个设置对应的位是1还是0。



因此要设置TDS_LEFT选项,必须将当前状态与0x00001进行或运算(即TDS_LEFT),因此在代码中

  m_controlState = m_controlState | TDS_LEFT 



<$ p相同$ p> m_controlState | = TDS_LEFT。

要取消设置TDS_LEFT选项,您必须将其与〜TDS_LEFT进行与操作。因此

  m_controlState = m_controlState& 〜TDS_LEFT 

与以下内容相同:

  m_controlState& =〜TDS_LEFT 

您还可以检查:如何在C ++中将枚举用作标志?
希望情况会更清楚。


I have a part of code that contains the following functions:

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);
    }
}

I know what a switch case is but i dont understand what these parts do.

m_controlState |= TDC_LEFT
m_controlState &= ~TDC_LEFT

m_controlState is an int. The GFLW_KEY's also refere to an int value.

Could someone explain what these parts do an example with input values and results would be nice.

解决方案

Also I think it should be explained what these operators do and are used this way.

m_controlState serves as flags, which means it contains in binary form which of the keys are pressed. For example if the values of tds constants are chosed like this:

TDS_LEFT             = 0x00001
TDS_RIGH = 0x01 << 2 = 0x00010 
TDS_UP   = 0x01 << 3 = 0x00100
TDS_DOWN = 0x01 << 4 = 0x01000

Then in single integer you can store information which options are set. To do that you just have to check if bit that corresponds on each setting is 1 or 0.

So to set TDS_LEFT option, you have to OR the current state with 0x00001( which is TDS_LEFT), so in code

m_controlState = m_controlState | TDS_LEFT

which is the same as

m_controlState |= TDS_LEFT.

To unset TDS_LEFT option you have to AND it with ~TDS_LEFT. So

m_controlState = m_controlState & ~TDS_LEFT

which is the same as:

m_controlState &= ~TDS_LEFT

You can also check: How to use enums as flags in C++?. Hope that makes it clearer.

这篇关于C ++的含义| =和&amp; =的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆