C語言學習:C語言運算子的優先順序和結合性詳解

正文共:2574 字 預計閱讀時間:7 分鐘

寫在前面

這個月以來基本沒更新文章了,懶了!今天講一下C語言的優先順序和結合性,是百度的一位同學上週私信給我希望能給發一篇關於運算子的優先順序和結合性的文章,他不是太明白。以前也經常有留言的,我都寫了。以後有什麼問題需要我寫教程來講解的都可以私信喔。明天就再更一篇關於C語言位運算的,我發現許多初學者都經常把運算子和位運算搞混。

C語言學習:C語言運算子的優先順序和結合性詳解

C語言運算子的優先順序和結合性表

C語言的運算子和結合性主要還是要記住一個表,不明白的時候我們就翻看一下。

C語言的運算子眾多,具有不同的優先順序和結合性,將它們全部列了出來,方便大家對比和記憶:

C語言學習:C語言運算子的優先順序和結合性詳解

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語言運算子很多,大家可以檢視上面的表格,有C語言書籍的也可以檢視後面的附錄,一般也是有的。一下子記住所有運算子的優先順序並不容易,還好C語言中大部分運算子的優先順序和數學中是一樣的,大家在以後的程式設計過程中也會逐漸熟悉起來。如果實在搞不清,可以加括號,就像下面這樣:

int d = a + (b * c);

括號的優先順序是最高的,括號中的表示式會優先執行,這樣各個運算子的執行順序就一目瞭然了。

2) 對於表示式a / b * c,除法和乘法的優先順序是相同的,這個時候到底該先執行哪一個呢?按照數學規則應該從左到右,先計算除法,在計算乘法;a / b的結果是 4,4 * c的結果是 8,所以 e 最終的值也是 8。這個推論也從執行結果中得到了證實,C語言的規則和數學的規則是一樣的。

當乘法和除法的優先順序相同時,編譯器很明顯知道先執行除法,再執行乘法,這是根據運算子的結合性來判定的。

所謂結合性,就是當一個表示式中出現多個優先順序相同的運算子時,先執行哪個運算子:先執行左邊的叫左結合性,先執行右邊的叫右結合性。

/和*的優先順序相同,又都具有左結合性,所以先執行左邊的除法,再執行右邊的乘法。

3) 像 +、-、*、/ 這樣的運算子,它的兩邊都有要計算的資料,每份這樣的資料都稱作一個運算元,一個運算子需要 n 個運算元就稱為 n 目運算子。例如:

+、-、*、/、= 是雙目運算子;

++、—— 是單目運算子;

? : 是三目運算子(這是C語言裡唯一的一個三目元算符,這個就必須強行記住了呀)。

一些容易出錯的優先順序問題

上表中,優先順序同為1 的幾種運算子如果同時出現,那怎麼確定表示式的優先順序呢?這是很多初學者迷糊的地方。下表就整理了這些容易出錯的情況:

C語言學習:C語言運算子的優先順序和結合性詳解

放大仔細看

這些容易出錯的情況,好好在編譯器上除錯除錯,這樣印象會深一些。一定要多除錯,光靠看程式碼,水平是很難提上來的。除錯程式碼才是最長水平的。

當一個表示式中出現多個運算子時,C語言會先比較各個運算子的優先順序,按照優先順序從高到低的順序依次執行;當遇到優先順序相同的運算子時,再根據結合性決定先執行哪個運算子:如果是左結合性就先執行左邊的運算子,如果是右結合性就先執行右邊的運算子。

還是那句話:不上機的練習就不是程式設計!

寫在最後

現在不怎麼更新了,大家想交流學習的就加入qq群:247229464

現在一直在折騰網站這個新家,大家可以百度的搜尋:程式設計世界網。

第一個就是喔!

明天發一篇關於C語言的位運算文章。

C語言學習:C語言運算子的優先順序和結合性詳解

關注我們:源世界Z

關注頭條號每天收聽我們的訊息,源世界為您奉上精品文章。歡迎訂閱點贊,謝謝!