Что такое & = и | = - PullRequest
       18

Что такое & = и | =

7 голосов
/ 04 ноября 2011

Я просматривал некоторый код VC ++ в большой кодовой базе и наткнулся на это:

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

Есть ли такой оператор как & = или | = в C ++?Для чего это?
Это эквивалент nState = nState & ~TOOL_TIPS_VISIBLE?

Ответы [ 7 ]

10 голосов
/ 04 ноября 2011

x &= y соответствует x = x & y
x |= y соответствует x = x | y

7 голосов
/ 04 ноября 2011

Что не было упомянуто, так это то, что операторы &= и |= могут быть перегружены. Следовательно, код, который вы разместили, зависит от типа 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. Опять же, крайне маловероятно, но, тем не менее, полезно знать.

Все остальные ответы, вероятно, применимы и здесь, но это стоит рассмотреть.

3 голосов
/ 04 ноября 2011

Поразрядно и или

в первом случае флаг (бит) выключен

nState &= ~TOOL_TIPS_VISIBLE

во втором случае флаг включен

nState |= TOOL_TIPS_VISIBLE
2 голосов
/ 04 ноября 2011

Да. &= равно & что += равно +

2 голосов
/ 04 ноября 2011

x &= y означает x = x & y.Так что да, ты прав.

1 голос
/ 04 ноября 2011

& и | аналогичны && и ||, только они работают в битовом режиме.Теперь вы можете представить, что &= и |= работают аналогично +=.То есть x &= y; ==> x = x & y;

1 голос
/ 04 ноября 2011
x &= y;

эквивалентно:

x = x & y;

Точно так же,

x|= y;

эквивалентно:

x = x | y;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...