Что это за оператор: & = - PullRequest
       47

Что это за оператор: & =

2 голосов
/ 18 января 2012

Может кто-нибудь объяснить, для чего нужен оператор &=?

Я искал, но получил результаты только с & или =.

Ответы [ 6 ]

11 голосов
/ 18 января 2012
a &= b;

То же самое, что и

a = a & b;

и является "побитовым и оператором", ищите это.

7 голосов
/ 18 января 2012

Это сокращенный оператор, который позволяет вам свернуть

a = a & b

в

a &= b

Помимо побитовых операций над целыми числами, &= можно использовать и с логическими значениями,позволяя вам свернуть

a = a && b

в

a &= b

Однако в случае логической операции расширенная форма имеет короткое замыкание, а последняя свернутая форма не закорачивается.

Пример:

let b() - функция, которая возвращает значение, а также выполняет действия, влияющие на состояние программы

let a - логическое значение, котороеfalse

если вы сделаете

a = a && b()

, произойдет короткое замыкание: поскольку a равно false, нет необходимости оценивать b (и дополнительные вычисления, которые могутслучается внутри b() пропускается).

С другой стороны, если вы делаете

a &= b()

, короткое замыкание не происходит: b оценивается в любом случае,даже если a равно false (и оценка b() не изменит логического результата), таким образом,любые дополнительные вычисления, которые могут произойти внутри b(), выполняются.

3 голосов
/ 18 января 2012

Это

x &= y;

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

x = x & y;

Обратите внимание, что & является побитовым и оператором.

0 голосов
/ 18 января 2012

a &= b эквивалентно a = a & b

0 голосов
/ 18 января 2012

В C # (и я думаю, что в большинстве языков) его оператор побитового присвоения.

a & = b эквивалентен a = a & b

http://msdn.microsoft.com/en-us/library/e669ax02.aspx

0 голосов
/ 18 января 2012

Если я правильно помню, это двухсторонняя операция ... например, она может быть использована с [Flags] Enum.Он проверяет, имеет ли ваша переменная-флаг определенное значение.

...