3.4 運算子優先順序
當我們組合多個運算子時,需要知道哪個先執行。例如 !a && b || c 該怎麼理解?這就像數學裡「先乘除、後加減」一樣——C++ 也替每個運算子規定好了計算的先後次序,這個次序就叫運算子優先順序。
目前學過的運算子,只要記住這個「由先到後」的相對順序就夠了:
括號
()>!> 算術(*/%>+-)> 比較(<>==…)>&&>||> 指派=
換句話說,幾個最常用、一定要記住的重點:
- 括號
()一定最先算(跟數學一樣)。 !排得非常前面(只輸給括號),它只作用在緊跟著的那一個東西上。所以要否定「整個比較式」請寫!(x >= 0)——寫成!x >= 0會變成先算!x、再拿結果跟0比,意思完全不同。- 算術運算子中「先乘除、後加減」(
*、/、%高於+、-)。 - 所有算術運算子都高於比較運算子;比較運算子又高於
&&、||這些邏輯運算子。 &&的優先級高於||。
若記不清楚,最保險的做法就是加上小括號 ()——多加幾個絕對不會錯,也讓別人一看就懂。
¶複雜表達式範例
#include <iostream>
using namespace std;
int main() {
int x = 5;
int y = 10;
int z = 15;
cout << boolalpha;
// 表達式:x > 3 && y < 20 || z == 15
// 優先順序:比較 > 邏輯與 > 邏輯或
// 實際理解:(x > 3) && (y < 20) || (z == 15)
// 進一步:((x > 3) && (y < 20)) || (z == 15)
bool result = x > 3 && y < 20 || z == 15;
cout << "Result: " << result << endl; // true
return 0;
}
¶動手試試看
寫一個程式驗證:a > b && c < d || e == f 的優先順序。試著用括號改寫它,確認你的理解是否正確。