C++ C++;含义|=和&=
我有一部分代码包含以下函数:C++ C++;含义|=和&=,c++,box2d,C++,Box2d,我有一部分代码包含以下函数: 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_c
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是一个int。GFLW_键也指一个int值
有人能解释一下这些部分的作用吗?一个输入值和结果的例子就好了。
x |=y
相当于x=x | y
通常,对于任何二进制运算符*
,a*=b
等同于a=a*b
如果你想知道什么是
&
和|
,请阅读。x |=y
等同于x=x | y
通常,对于任何二进制运算符*
,a*=b
等同于a=a*b
如果您想知道什么是
&
和|
,请阅读。这些是按位and和OR操作。您提到的行相当于:
m_controlState = m_controlState | TDC_LEFT;
m_controlState = m_controlState & ~TDC_LEFT
m_controlState = m_controlState | TDC_LEFT
m_controlState = m_controlState & ~TDC_LEFT
这些是按位AND和OR操作。您提到的行相当于:
m_controlState = m_controlState | TDC_LEFT;
m_controlState = m_controlState & ~TDC_LEFT
m_controlState = m_controlState | TDC_LEFT
m_controlState = m_controlState & ~TDC_LEFT
&=|=运算符在某种意义上类似于+=-=(即a&=b相当于a=a&b)。但是,它们执行二进制操作正在执行位与运算,而|正在执行位或运算 例如: a=1101 b=1011 a&b=1001
a | b=1111&=|=运算符在某种意义上类似于+=-=(即a&=b相当于a=a&b)。但是,它们执行二进制操作正在执行位与运算,而|正在执行位或运算 例如: a=1101 b=1011 a&b=1001
a | b=1111
x |=y
专门打开(设置为1)出现在y
中的x
中的那些位,使x
中的所有其他位保持原样
x&=~y
专门关闭(设置为0)出现在y
中的x
中的那些位,使x
中的所有其他位保持原样。x |=y
专门打开(设置为1)出现在y
中的x
中的那些位,使x
中的所有其他位保持原样
x&=~y
专门关闭(设置为0)出现在y
中的x
中的那些位,使x
中的所有其他位保持原样。这是一种设置和重置字中特定位的简单方法
位字|=掩码是位字=位字|掩码的缩写,用于设置掩码位
位字&=~掩码清除该位(查看布尔代数笔记本了解原因)这是一种设置和重置字中特定位的简单方法 位字|=掩码是位字=位字|掩码的缩写,用于设置掩码位 位字&=~掩码清除该位(查看布尔代数笔记本了解原因)这两个:
m_controlState |= TDC_LEFT
m_controlState &= ~TDC_LEFT
相当于:
m_controlState = m_controlState | TDC_LEFT;
m_controlState = m_controlState & ~TDC_LEFT
m_controlState = m_controlState | TDC_LEFT
m_controlState = m_controlState & ~TDC_LEFT
所有内置的X=操作符都是这样工作的
m_controlState
很可能被视为一个位集m_controlState
可以是,例如01010000
(实际上,它将大于8位)
1) |
是按位或,相当于向该位集添加
因此,如果TDC_LEFT为00000010:
01010000 | 00000010 = 01010010
2) ~
是按位求反:
~00000010 = 111111101
如果你这样做了
01010010&~(00000010)=01010000
,它实际上相当于位集差
简言之:
bitsetA+bitsetB bitsetA |位集
bitsetA-bitsetB bitsetA&~bitset
这两个:
m_controlState |= TDC_LEFT
m_controlState &= ~TDC_LEFT
相当于:
m_controlState = m_controlState | TDC_LEFT;
m_controlState = m_controlState & ~TDC_LEFT
m_controlState = m_controlState | TDC_LEFT
m_controlState = m_controlState & ~TDC_LEFT
所有内置的X=操作符都是这样工作的
m_controlState
很可能被视为一个位集m_controlState
可以是,例如01010000
(实际上,它将大于8位)
1) |
是按位或,相当于向该位集添加
因此,如果TDC_LEFT为00000010:
01010000 | 00000010 = 01010010
2) ~
是按位求反:
~00000010 = 111111101
如果你这样做了
01010010&~(00000010)=01010000
,它实际上相当于位集差
简言之:
bitsetA+bitsetB bitsetA |位集
bitsetA-bitsetB bitsetA&~bitset
此外,我认为应该解释一下这些操作符的作用和使用方式
m_controlState用作标志,这意味着它以二进制形式包含按下的键。
例如,如果tds常数的值选择如下:
TDS_LEFT = 0x00001
TDS_RIGH = 0x01 << 2 = 0x00010
TDS_UP = 0x01 << 3 = 0x00100
TDS_DOWN = 0x01 << 4 = 0x01000
这和
m_controlState |= TDS_LEFT.
要取消设置TDS_LEFT选项,您必须使用~TDS_LEFT进行设置。所以
m_controlState = m_controlState & ~TDS_LEFT
这与:
m_controlState &= ~TDS_LEFT
您还可以检查:。
希望这能让事情变得更清楚。我还认为应该解释一下这些操作符的作用和使用方式 m_controlState用作标志,这意味着它以二进制形式包含按下的键。 例如,如果tds常数的值选择如下:
TDS_LEFT = 0x00001
TDS_RIGH = 0x01 << 2 = 0x00010
TDS_UP = 0x01 << 3 = 0x00100
TDS_DOWN = 0x01 << 4 = 0x01000
这和
m_controlState |= TDS_LEFT.
要取消设置TDS_LEFT选项,您必须使用~TDS_LEFT进行设置。所以
m_controlState = m_controlState & ~TDS_LEFT
这与:
m_controlState &= ~TDS_LEFT
您还可以检查:。
希望它能更清楚。见:“孪生兄弟只给它一个名字,而不是一个解释。可能的复制品在这里看到:”孪生兄弟只给它一个名字,而不是一个解释。可能的重复添加一个小的关于什么和什么是和(或C++符号),可能改变,或“和”和“to <代码>或< /代码>和<代码>和< /代码>。这是最简单的答案。在一个小的地方添加关于“什么”和“和”(C++符号),以及可能改变“或者”和“和”到<代码>或和