2012-01-18 22 views
2

演算子&=は誰か説明できますか?この演算子は何ですか:&=

私は検索しましたが、結果は&または=となっています。

+0

に相当し、これは定期的な演算子ですか? http://www.w3schools.com/js/js_operators.asp – Abadon

+0

一般的に、a#= bは任意のバイナリ演算子#に対してa = a#bと等価です。 – DenverCoder8

+0

(受け入れられた答えは不完全であることに注意してください) '&='演算子の詳細については、http://stackoverflow.com/a/8910652/1018783を参照してください。 –

答えて

11
a &= b; 

a = a & b; 

&と同じであることを検索し、 "ビット単位の演算子" です。

+0

より具体的には、 "ビット単位のAND代入演算子" ([MSDNによる](http://msdn.microsoft.com/en-us/library/windows/apps/a9h8y72a(v = vs94).aspx)とにかく)。 –

+0

'&='は、** bitwise **演算子と** logical ** AND演算子の複合演算子です。論理ANDの場合の唯一の特質は、折りたたまれた '&='が短絡していない(右手オペランドが常に評価される)ことであり、左手オペランドが 'false'と評価される場合、 。 –

7

それはあなたが整数のビット演算は別に

a &= b 

a = a & b 

を折りたたむことができます速記オペレータは、&=あなたが

を崩壊することができ、同様のブール値に使用することができます
a = a && b 

から

a &= b 

ただし、論理演算の場合は、展開形式が短絡し、後者の短縮形式は短絡しません。

例:

b()が値を返す関数であるとするとも

aはあなたが

をすれば false

をあるブールであるとするプログラムの状態に影響を与えるものを行います

a = a && b() 

短絡が発生する:aがであるためbを評価する必要はありません(b()内で発生する可能性のある余分な計算はスキップされます)。一方

、あなたが

a &= b() 

をすれば、短絡が発生しません:bafalse場合でも、いずれにしても評価され(とb()を評価することは論理的に変更しないだろう結果)b()内で発生する可能性のある余分な計算が実行されます。

0

私はそれを正しく覚えていれば、例えば、[Flags] Enumと一緒に使うことができます。 フラグ変数に特定の値があるかどうかをチェックします。

3

この

x &= y; 

&はビット単位のAND演算子であること

x = x & y; 

注意することは等価です。

0

a &= ba = a & b

関連する問題