--- GA: G-RZYLL0RZGV --- ###### tags: `大一程設-下` `東華大學` `東華大學資管系` `基本程式概念` `資管經驗分享` 運算子的優先權 === [TOC] ## 前言 在任何的程式語言裡面,都有運算子,如 `+ - * /`,我們在學數學的時候都知道,先乘除後加減,看到括號要先算,這個不變的道理。在程式語言裡面也是一樣的,但程式語言內運算子又更多更複雜了,所以當然要向基本運算一樣,幫每個運算子作<span style="color:red">**優先順序跟結合性**</span>的訂定。 ## 運算子優先權的重要核心 <span style="color:red;font-size:25px">**全部的運算子在看優先順序時,統一先看優先權高低,再看結合性。**</span> ## 名詞釐清 - 運算元與運算子 100 + 20 = 120 a + b * 100、20、120 這樣的數字稱為運算元(operand) * +、= 這樣的符號稱為運算子(operator) * a、b 這樣的變數也稱為運算元(operand) 請不要搞混,要背熟哦~ ## 名詞釐清 - 一元運算子、二元運算子 元代表運算元的意思,一或二就代表這個運算子一次要搭配幾個運算元。 以 `!` 為例,他就是一元運算子,表示 `NOT`,所以我們再打 code 的時候通常會打 `if(!bool_variable)`,這個 bool_variable 是一個布林變數(變數是一個運算元),所以`!`搭配一個運算元。 以四則運算的 `+` 為例,他是二元運算子,所以我們通常會打 `a+b`,你發現它搭配了兩個運算元 `a` 跟 `b`。 以正負號的 `+` 或 `-` 為例,他是一元運算子,正號我們通常會省略,負號我們通常會打 `-10`、`-a`,要搭配一個運算元。 ## 名詞釐清 - 結合性 接下來很重要的名詞就是結合性,每個運算子都會有結合性。而結合性有左結合與右結合兩種。 左與右的差別是在做運算的時候從哪邊過去為優先。 ### 左結合 基本的四則運算運算子都是左結合。 `3 + 5 + 8 + 10`,因為 `+` 是左結合,所以從左邊優先,他其實是這樣。 `(((3 + 5) + 8) + 10)` 記得看到括號要先算!所以你會發現他是左邊優先一直往右 關係運算子也都是左結合。如 `>`、`>=`、`<`、`<=` `a > b > c > d`,因為是左結合所以會變成 `(((a > b) > c) > d)`。 其他的像 `==`、`!=`、`||`、`&&` 也都是左結合。 當然還有更多的左結合,可以看下面的參考連結。 ### 右結合 右結合只有三類,分別是<span style="color:red">一元運算子、三元運算子、指派運算子</span> 指派運算子像是 `=`、`+=`、`-=`、`*=`、`/=` 等等的這些。 <span style="color:red">**請注意,實際上不會這樣寫下面這樣,我只是幫你了解右結合**</span> ```cpp= int a = 5, b = 4, c = 10; a+=b+=c; cout << a; ``` 因為我們知道指派運算子是右結合,所以會像這樣。 `(a += (b += c))`,內層括號會優先算,且右結合,所以會從右邊往左推。 但在實務上程式碼不會這樣寫,太弔詭了。 `a += b += c` 他的運作是: `a = a + (b += c)` 又可以再拆成 `a = a + (b = b + c)` 你會發現不就是 `a = a + b + c` 嗎... 希望你有充分了解左結合與右結合摟,之所以認真談論這個,是因為<span style="color:red">指標運算很重視優先權跟結合性</span>,所以希望你搞懂! ## 優先權排序 <span style="color:red;font-size:25px">**全部的運算子在看優先順序時,統一先看優先權高低,再看結合性。**</span> 這邊網路上已經有許多大神都已經整理好了,參考連結直接給大家! 可能不是每個運算子大家都了解,趁這個機會知道他們在幹嘛吧,可以多利用 google 哦! [參考連結 - 1](https://magicjackting.pixnet.net/blog/post/70902861) [參考連結 - 2](http://programingman.blogspot.com/2015/01/cc.html) 請記得回去看指標的這篇喔,了解指標的運算! -> [pointer 實作一般陣列,以及 1-d dynamic array](https://hackmd.io/@ndhu-programming-2021/B1NUHICaF#%E8%A3%9C%E5%85%85%EF%BC%8C%E9%81%B8%E6%93%87%E6%80%A7%E9%96%B1%E8%AE%80%E6%8C%87%E6%A8%99%E7%9A%84%E9%81%8B%E7%AE%97-pointer-arithmetic)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up