我在一次測試中偶然發現了一個關於算術優先級的問題,我無法圍繞它的答案一竅不通。C算術優先
float x = 5 % 3 * + 2 - 4.5/5 * 2 + 2;
我的「理解」,現在是乘法必須首先發生分裂和模數之前,但是當我嘗試使用這種方法,答案是6.55,而不是4.20。我試着玩弄表達方式(在這裏和那裏添加括號),事實證明,5%3先於其他所有事情發生。我只是不明白爲什麼,因爲根據我提供的優先表,情況不應該如此。有人可以幫我解決這個問題嗎?
我在一次測試中偶然發現了一個關於算術優先級的問題,我無法圍繞它的答案一竅不通。C算術優先
float x = 5 % 3 * + 2 - 4.5/5 * 2 + 2;
我的「理解」,現在是乘法必須首先發生分裂和模數之前,但是當我嘗試使用這種方法,答案是6.55,而不是4.20。我試着玩弄表達方式(在這裏和那裏添加括號),事實證明,5%3先於其他所有事情發生。我只是不明白爲什麼,因爲根據我提供的優先表,情況不應該如此。有人可以幫我解決這個問題嗎?
乘法,除法和餘數運算符的優先級高於加法和減法的優先級。
當乘法,除法或餘經營者去了一個又一個,那麼他們左相關,這意味着他們將通過一個給定的順序來執行的。
在你的例子中,5 % 3
將首先被執行,然後乘法(無論數量是多少),然後除法4.5/5
,然後結果乘以2,並且只有在執行加減之後纔會執行。
你的C代碼:
x = 5 % 3 * + 2 - 4.5/5 * 2 + 2;
首先,一元加號和一元負的優先級最高:
x = 5 % 3 * (+ 2) - 4.5/5 * 2 + 2;
其次,乘法,除法和餘數具有相同的優先級,從左至右相關向右:
x = ((5 % 3) * (+ 2)) - ((4.5/5) * 2) + 2;
最後,加法和減法具有相同的優先級,相關聯的f ROM左至右:
x = ((((5 % 3) * (+ 2)) - ((4.5/5) * 2)) + 2);
現在我們計算表達式:
x = (((2 * (+ 2)) - ((4.5/5) * 2)) + 2);
x = (((2 * 2) - ((4.5/5) * 2)) + 2);
x = ((4 - ((4.5/5) * 2)) + 2);
x = ((4 - (0.9 * 2)) + 2);
x = ((4 - 1.8) + 2);
x = (2.2 + 2);
x = 4.2;
它會如何運作?你有'* +',而且之間沒有什麼可操作的。有人請幫我理解。 – user902384
當您擁有相同優先級的運算符時,首先會先處理該優先級。 –
@Shiv,那個+是下面2中的一元運算符。 – sh1