2012-01-18 67 views
2

有人可以解釋什麼是運營商&=這是什麼算子:&=

我搜索了,但我只得到了&=的結果。

+0

這是一個普通的操作者? http://www.w3schools.com/js/js_operators.asp – Abadon 2012-01-18 13:10:16

+0

一般而言,對於任何二元運算符#,#= b等同於a = a#b。 – DenverCoder8 2012-01-18 13:44:08

+0

(請注意,接受的答案是不完整的,請參閱http://stackoverflow.com/a/8910652/1018783關於&&操作符的更詳盡的解釋) – 2012-01-23 15:44:10

回答

11
a &= b; 

相同

a = a & b; 

&是 「按位與運算符」 中,搜索。

+0

更具體地說,它是「按位AND賦值運算符」 ([根據MSDN](http://msdn.microsoft.com/en-us/library/windows/apps/a9h8y72a(v = vs.94).aspx),無論如何)。 – 2012-01-18 13:14:05

+0

請注意'&='是** **按位**和**邏輯** AND運算符的複合賦值運算符,而不僅僅是「按位和運算符」。邏輯「與」情況的唯一特點是摺疊的&&不會短路(總是計算右手操作數),而如果左手操作數評估爲「假」,則未摺疊的&&操作符會發生短路。 – 2012-01-18 20:04:56

7

這是一個速記運營商允許你崩潰

a = a & b 

a &= b 
從整數位運算

除此之外,&=可以對布爾值使用爲好,讓你崩潰

a = a && b 

分成

a &= b 

但是,在邏輯運算的情況下,展開形式是短路,而後者摺疊形式不會短路。

例子:

b()是返回一個值的函數,也做的東西,會影響程序的狀態

a是一個布爾值,它是false

如果你

a = a && b() 

發生短路:由於afalse不需要評估b(並且跳過b()內部可能發生的額外計算)。

在另一方面,如果你這樣做

a &= b() 

短路不會發生:b在任何情況下被評估,即使afalse(和評估b()不會改變的邏輯結果),因此b()內可能發生的任何額外計算都會執行。

0

如果我沒記錯的話biwise操作...例如它可以和[Flags] Enum一起使用。 它檢查你的標誌變量是否有特定的值。

3

x &= y; 

相當於

x = x & y; 

注意&是按位與操作。

0

a &= b相當於a = a & b