CodeGym /課程 /C# SELF /運算子優先順序與條件中的括號

運算子優先順序與條件中的括號

C# SELF
等級 3 , 課堂 4
開放

1. 前言

我們先從生活中的比喻開始。想像一下食譜:

把麵粉、雞蛋和糖混合打發,加進奶油再打發一次。

是不是怪怪的?現在想像一下,如果「打發」和「加進」之間有逗號或括號,步驟馬上就清楚多了。

寫程式時也會遇到類似情況,當你寫出一個複雜的表達式:

bool result = a > 0 && b < 10 || c == 3;

順序是什麼?先算 a > 0 && b < 10,再來 || c == 3?還是反過來? 如果沒有明確的運算順序,電腦就會「搞錯材料」,結果會讓你傻眼。

2. C# 的運算子優先順序

C#(跟大多數程式語言一樣)有一張運算子優先順序表。
優先順序高的運算子會比低的先執行。

來看看這張表最重要的部分 (針對條件式):

運算子 說明 優先順序
() 括號 最高
! 邏輯「非」
==, != 等於 / 不等於
<, >, <=, >= 比較
&& 邏輯「AND」 較低
|| 邏輯「OR」 更低

(還有算術運算子 — 它們的優先順序比邏輯運算子高。)

最重要的規則

「AND」(&&) 的優先順序比「OR」(||) 高,
也就是說會先算「AND」,再算「OR」。

條件優先順序的流程圖

會先算 a > 0 && b < 10,然後結果再跟 c == 3|| 比較

實際上:a > 0 && b < 10 || c == 3 — 會先算 a > 0 && b < 10,然後結果再跟 c == 3|| 比較。

3. 運算子的方向:從左到右還是反過來

除了優先順序,還有一個詞:結合性
這是指如果運算子「排在一起」而且優先順序一樣,會從哪個方向開始算。

例子:

bool a = true, b = false, c = true;
bool result = a && b && c;

問題:怎麼算?
答案:&& 的結合性是 從左到右
所以會先算 a && b,然後再跟 c 算。

針對條件來說:

運算子 結合性
&&, || 從左到右
! 從右到左

4. 括號 — 複雜條件裡的好朋友

這裡就是魔法(也是救星)開始的地方。當你寫表達式時,括號 會改變優先順序,讓你的 code 更清楚也更安全。

例子 1(沒括號):

// 我們想要:「如果使用者是成年人而且是公民,或是他有特別通行證」
bool isAdult = age >= 18;
bool isCitizen = country == "白俄羅斯";
bool hasPermit = hasSpecialPass == true;

if (isAdult && isCitizen || hasPermit)
{
    Console.WriteLine("允許進入!");
}

C# 怎麼算:
會先算 isAdult && isCitizen,然後結果再跟 hasPermit|| 比較。

  • 假設 isAdult = true, isCitizen = false, hasPermit = true
  • isAdult && isCitizentrue && falsefalse
  • false || truetrue

也就是說,只要有特別通行證就能進。
如果沒有通行證,但你是成年公民 — 也能進。

例子 2(有括號):

if (isAdult && (isCitizen || hasPermit))
{
    Console.WriteLine("允許進入!");
}

現在程式會先檢查:
isCitizen || hasPermit,然後這個結果再跟 isAdult 一起算。

也就是你必須是成年人 而且(要嘛是公民,要嘛有特別通行證)。
括號小小一個,邏輯差很大喔!

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION