2012-01-18 4 views
2

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

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

+0

это регулярный оператор? http://www.w3schools.com/js/js_operators.asp – Abadon

+0

В общем случае # = b эквивалентно a = a # b для любого двоичного оператора #. – DenverCoder8

+0

(Обратите внимание, что принятый ответ является неполным. См. Http://stackoverflow.com/a/8910652/1018783 для более подробного объяснения относительно оператора '& ='). –

ответ

11
a &= b; 

То же самое,

a = a & b; 

& является "побитовое и оператор", поиск для этого.

+0

Более конкретно, это «побитовый оператор AND AND», ([согласно MSDN] (http://msdn.microsoft.com/en-us/library/windows/apps/a9h8y72a (v = vs.94) .aspx), в любом случае). –

+0

Обратите внимание, что '& =' - это оператор составного присваивания для ** как ** ** побитового **, так и ** логического ** И оператора, а не только «побитовый и оператор». Единственная особенность в логическом случае И состоит в том, что свернутый '& =' не является короткозамкнутым (правый операнд всегда оценивается всегда), в то время как незаваленный '&&' оператор выполняет короткое замыкание, если левый операнд оценивается как 'false' , –

7

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

a = a & b 

в

a &= b 

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

a = a && b 

a &= b 

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

Пример:

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

позволить a быть логическая переменная, которая false

если вы

a = a && b() 

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

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

a &= b() 

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

0

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

3

Этот

x &= y; 

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

x = x & y; 

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

0

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