什么是&=和| =
问题描述:
我会通过一些VC++代码,在一个大的代码库和跨越这来了:什么是&=和| =
if (nState & TOOL_TIPS_VISIBLE)
nState &= ~TOOL_TIPS_VISIBLE;
else
nState |= TOOL_TIPS_VISIBLE;
break;
是否有这样的运营商如& =或| =在C++?它是为了什么?
这相当于nState = nState & ~TOOL_TIPS_VISIBLE
吗?
答
x &= y
相同x = x & y
x |= y
相同x = x | y
+0
不一定正确,请参阅我的答案。 –
答
x &= y
意味着x = x & y
。所以是的,你是对的。
答
是的。 &=
是&
什么+=
是+
答
及其按位和或
在第一种情况下的标志(位)被断开
nState &= ~TOOL_TIPS_VISIBLE
在标记被打开
第二壳体nState |= TOOL_TIPS_VISIBLE
答
x &= y;
相当于:
x = x & y;
以同样的方式,
x|= y;
等同于:
x = x | y;
答
&
和|
类似于&&
和||
,只有他们工作在按位时尚。所以现在你可以想象&=
和|=
的作用类似于+=
。那是x &= y; ==> x = x & y;
答
什么没有提到的是&=
和|=
运算符可以被重载。因此,你发布的代码取决于nState的类型(尽管它很明显是一个int,所以很可能这里不适用)。重载&=
不会隐超载&
,所以在这种情况下
x &= y might not be the same as x = x & y
它可能还取决于什么TOOL_TIPS_VISIBLE
是。
struct s{
int x;
};
void operator &= (int& x, s y)
{
x = 0;
}
现在,只要你做的事:
s TOOL_TIPS_VISIBLE;
x &= TOOL_TIPS_VISIBLE;
x
将成为0
。再一次,极不可能,但很好知道尽管如此。
所有其他答案可能适用于此,但这是值得考虑的。
答案可能不像这样直截了当(尽管很可能是这样)。我添加了一些您可能会觉得有用的信息。 –