什么是& =和| =

时间:2011-11-04 08:09:02

标签: c++ visual-c++ operators

我在一个大型代码库中浏览了一些VC ++代码并遇到了这个问题:

    if (nState & TOOL_TIPS_VISIBLE)
        nState &= ~TOOL_TIPS_VISIBLE;
    else
        nState |= TOOL_TIPS_VISIBLE;
    break;

在C ++中是否有& =或| =这样的运算符?它的用途是什么? 它等同于nState = nState & ~TOOL_TIPS_VISIBLE吗?

7 个答案:

答案 0 :(得分:10)

x &= yx = x & y相同 x |= yx = x | y

相同

答案 1 :(得分:7)

未提及的是&=|=运算符都可以重载。因此,您发布的代码取决于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。再一次,极不可能,但很高兴知道。

所有其他答案可能适用于此,但这值得考虑。

答案 2 :(得分:3)

它的按位和或

在第一种情况下,标志(位)关闭

nState &= ~TOOL_TIPS_VISIBLE

在第二种情况下,标志打开

nState |= TOOL_TIPS_VISIBLE

答案 3 :(得分:2)

x &= y表示x = x & y。所以是的,你是对的。

答案 4 :(得分:2)

是。 &= &+=+

的{{1}}

答案 5 :(得分:1)

x &= y;

相当于:

x = x & y;

以同样的方式,

x|= y;

相当于:

x = x | y;

答案 6 :(得分:1)

&|&&||类似,只是按位方式工作。现在您可以想象&=|=的工作方式类似于+=。那是x &= y; ==> x = x & y;