算術運算式
一個算術運算式是由運算子和運算元組成的表達式,用於執行數學計算。
常見的算術運算子包括加法(+)、減法(-)、乘法(*)、除法(/)和取餘數(%);運算元指的是參與計算的數值或變量。
算術運算式有三種表達方式,依運算子在運算元的相對位置而定:
- 前序表示法(Prefix Notation):運算子位於運算元之前。例如,
+ 3 5表示將 3 和 5 相加。 - 中序表示法(Infix Notation):運算子位於運算元之間,這是最常見的表示法。例如,
3 + 5表示將 3 和 5 相加。 - 後序表示法(Postfix Notation):運算子位於運算元之後。例如,
3 5 +表示將 3 和 5 相加。
生活上學到的基本都是中序表示法,寫程式時一般也通常會使用中序表示法來撰寫算術運算式,因為它更符合人類的閱讀習慣。
不過實際上對電腦而言,中序表示法因為需要考慮運算子優先順序和括號等因素,解析起來較為複雜,所以編譯器或直譯器通常會將中序表示法轉換為前序或後序表示法來進行計算。
中序 vs 前序與後序
以 (A + B) * D + E / (F + A * D) + C 為例,演示如何從中序轉前序。
中序轉前序
對於中序轉前序 or 轉後續而言,只要先把中序表示法理的運算邏輯都先以括號標示出來,接著依照括號的優先順序來處理即可。
- 幫中序表示法加上括號,標示出運算優先順序:
(( (A + B) * D ) + ( E / ( F + (A * D) ) ) ) + C。 - 接下來從內層擴號一層一層處理到外層擴號,將運算子放在運算元前面:
(A + B)轉為+ A B(+ (A + B) * D)轉為* + A B D(A * D)轉為* A D(F + (A * D))轉為+ F * A D(E / (F + (A * D)))轉為/ E + F * A D(( (A + B) * D ) + ( E / ( F + (A * D) ) ) )轉為+ * + A B D / E + F * A D
- 最後將最外層的
+ C加上去,得到完整的前序表示法:+ + * + A B D / E + F * A D C
中序轉後序
中序轉後續的邏輯與中序轉前序類似,只是將運算子放在運算元後面。
- 幫中序表示法加上括號,標示出運算優先順序:
(( (A + B) * D ) + ( E / ( F + (A * D) ) ) ) + C。 - 接下來從內層擴號一層一層處理到外層擴號,將運算子放在運算元後面:
(A + B)轉為A B +(+ (A + B) * D)轉為A B + D *(A * D)轉為A D *(F + (A * D))轉為F A D * +(E / (F + (A * D)))轉為E F A D * + /(( (A + B) * D ) + ( E / ( F + (A * D) ) ) )轉為A B + D * E F A D * + / +