什么是 &= 和 |=

What is &= and |=

本文关键字:什么      更新时间:2023-10-16

我在一个大型代码库中浏览了一些VC++代码,发现了以下内容:

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

有&=这样的运算符吗或者|=在C++中?它是干什么的
它相当于nState = nState & ~TOOL_TIPS_VISIBLE吗?

x &= yx = x & y相同
x |= yx = 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;

CCD_ 11将变为CCD_。同样,可能性很小,但很高兴知道。

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

它的位和或

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

nState &= ~TOOL_TIPS_VISIBLE

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

nState |= TOOL_TIPS_VISIBLE

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

是。&=&的作用就像+=+的作用一样

x &= y;

相当于:

x = x & y;

同样,

x|= y;

相当于:

x = x | y;

&|类似于&&||,只是它们以位方式工作。所以现在你可以想象&=|=的工作原理类似于+=。那就是x &= y; ==> x = x & y;