4 回答

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

TA貢獻3593條經(jīng)驗 獲得超1個贊

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

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