巧解C语言运算符的优先级和结合性
本篇文章我們從一個例子入手講解,請看下面的代碼:
#include int main(){ int a = 16, b = 4, c = 2; int d = a b * c; int e = a / b * c; printf( "d=%d, e=%d\n", d, e); return 0; }運行結果:
d=24, e=8
1) 對于表達式a b * c,如果按照數學規則推導,應該先計算乘法,再計算加法;b * c的結果為 8,a 8的結果為 24,所以 d 最終的值也是 24。
從運行結果可以看出,我們的推論得到了證實,C語言也是先計算乘法再計算加法,和數學中的規則一樣。
先計算乘法后計算加法,說明乘法運算符的優先級比加法運算符的優先級高。所謂優先級,就是當多個運算符出現在同一個表達式中時,先執行哪個運算符。
C語言有幾十種運算符,被分成十幾個級別,有的運算符優先級不同,有的運算符優先級相同。
一下子記住所有運算符的優先級并不容易,還好C語言中大部分運算符的優先級和數學中是一樣的,大家在以后的編程過程中也會逐漸熟悉起來。如果實在搞不清,可以加括號,就像下面這樣:
括號的優先級是最高的,括號中的表達式會優先執行,這樣各個運算符的執行順序就一目了然了。
2) 對于表達式a / b * c,除法和乘法的優先級是相同的,這個時候到底該先執行哪一個呢?
按照數學規則應該從左到右,先計算除法,在計算乘法;a / b的結果是 4,4 * c的結果是 8,所以 e 最終的值也是 8。這個推論也從運行結果中得到了證實,C語言的規則和數學的規則是一樣的。
當乘法和除法的優先級相同時,編譯器很明顯知道先執行除法,再執行乘法,這是根據運算符的結合性來判定的。
所謂結合性,就是當一個表達式中出現多個優先級相同的運算符時,先執行哪個運算符:先執行左邊的叫左結合性,先執行右邊的叫右結合性。
/和*的優先級相同,又都具有左結合性,所以先執行左邊的除法,再執行右邊的乘法。
3) 像 、-、*、/ 這樣的運算符,它的兩邊都有要計算的數據,每份這樣的數據都稱作一個操作數,一個運算符需要 n 個操作數就稱為 n 目運算符。例如:
、-、*、/、= 是雙目運算符;
、-- 是單目運算符;
? : 是三目運算符(這是C語言里唯一的一個三目元算符,后續我們將會講解)。
總結
當一個表達式中出現多個運算符時,C語言會先比較各個運算符的優先級,按照優先級從高到低的順序依次執行;
當遇到優先級相同的運算符時,再根據結合性決定先執行哪個運算符:如果是左結合性就先執行左邊的運算符,如果是右結合性就先執行右邊的運算符。
C語言的運算符眾多,每個運算符都具有優先級和結合性,還擁有若干個操作數。對于沒有學到的運算符,大家不必深究,一帶而過即可,等學到時再來回顧。
聲明:
本文于網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。
總結
以上是生活随笔為你收集整理的巧解C语言运算符的优先级和结合性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果省电模式在哪里设置
- 下一篇: C语言中的三目运算符是啥?有何用处?