4 回答

TA貢獻883條經驗 獲得超454個贊
a += a *= a;? 這里并不是幾個“算數運算符”和“賦值運算符”,而是兩個“復合賦值運算符”:+= 和 *=。 它們的運算順序是從左到右。
復合賦值運算符運算時會先對左側操作數求值并記住這個值,然后再對右側求值,最后再執(zhí)行賦值。
那么這個表達式中 += 運算符先運算:
先求?a += a* = a(我用粗體標出來),記下這個 a 的值為 3
再求右側操作數?a?+= a* = a 的值,它是個 *= 表達式
仍然是求復合賦值運算符左側的 a += a *= a,會記下這時 a 的值還是 3
再求右側操作數?a += a *= a,這個 a 是 3,隨后執(zhí)行復合賦值,*= 表達式的值為 9,這個 9 就是第 2 步中要計算的 *= 表達式的值
執(zhí)行復合賦值 +=。雖然你覺得這時 a 的值應該是 9,但是復合賦值運算時會用之前記下的左操作數的值(也就是第 1 步中記下的 3)
所以最終 a = 3 + 9

TA貢獻3593條經驗 獲得超0個贊

TA貢獻58條經驗 獲得超18個贊
個人理解:
????a += a * = a;
因為:a += a? ? 等于? ? a = a + a;
????????? ?a *= a? ? 等于????a = a * a;
所以
????a = a + ( a * a ) ;代入3 得12。

TA貢獻16條經驗 獲得超6個贊
賦值運算符和復合賦值運算符是從右邊開始的,計算順序為:
a?*?a?→?a?先算最右的賦值給a.
a?+?a?→?a?再算剩下右面的賦值給a.
如果是a*=a+=a;結果就是18.
添加回答
舉報