操作符優(yōu)先級和執(zhí)行順序

今天才發(fā)現(xiàn)原來有人把操作符優(yōu)先級和執(zhí)行順序混在一起了 ——輪子哥???

舉個例子來說明操作符優(yōu)先級和執(zhí)行順序之間的關系就知道了。

1 + 2 + 3 × 4 = 3 + 3 × 4 = 3 + 12 = 15
乘法優(yōu)先級高于加法,然而先執(zhí)行的是加法運算。

該如何解釋這種現(xiàn)象呢

如果提到波蘭式和逆波蘭式的話,就明白的話,就不用向下看了(逃

逆波蘭表示法Reverse Polish notationRPN,或逆波蘭記法),是一種是由波蘭數(shù)學家揚·武卡謝維奇1920年引入的數(shù)學表達式方式,在逆波蘭記法中,所有操作符置于操作數(shù)的后面,因此也被稱為后綴表示法。逆波蘭記法不需要括號來標識操作符的優(yōu)先級。
——喂雞百科

劃重點了,逆波蘭記法不需要括號來標識操作符的優(yōu)先級
也就是說,表達式和運算符優(yōu)先級沒什么關系。括號是用來確定語法樹結構的,而優(yōu)先級的作用就是少寫兩個括號,書寫觀看方便點。

如果還不明白,或者不了解逆波蘭式,再舉個例子就明白了,(懶,直接貼喂雞的Demo了

中綴表達式“5 + ((1 + 2) * 4) ? 3”寫作
5 1 2 + 4 * + 3 ?
下表給出了該逆波蘭表達式從左至右求值的過程,堆棧欄給出了中間值,用于跟蹤算法。

輸入 操作 堆棧 注釋
5 入棧 5
1 入棧 5, 1
2 入棧 5, 1, 2
+ 加法運算 5, 3 (1, 2)出棧;將結果(3)入棧
4 入棧 5, 3, 4
* 乘法運算 5, 12 (3, 4)出棧;將結果(12)入棧
+ 加法運算 17 (5, 12)出棧;將結果 (17)入棧
3 入棧 17, 3
? 減法運算 14 (17, 3)出棧;將結果(14)入棧

計算完成時,棧內(nèi)只有一個操作數(shù),這就是表達式的結果:14
上述運算可以重寫為如下運算鏈方法(用于HP的逆波蘭計算器)
1 2 + 4 * 5 + 3 ?

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容