
- C程式設計教程
- C - 首頁
- C語言基礎
- C - 概述
- C - 特性
- C - 歷史
- C - 環境設定
- C - 程式結構
- C - Hello World
- C - 編譯過程
- C - 註釋
- C - 詞法單元
- C - 關鍵字
- C - 識別符號
- C - 使用者輸入
- C - 基本語法
- C - 資料型別
- C - 變數
- C - 整數提升
- C - 型別轉換
- C - 型別強制轉換
- C - 布林值
- C語言中的常量和字面量
- C - 常量
- C - 字面量
- C - 轉義序列
- C - 格式說明符
- C語言中的運算子
- C - 運算子
- C - 算術運算子
- C - 關係運算符
- C - 邏輯運算子
- C - 位運算子
- C - 賦值運算子
- C - 一元運算子
- C - 自增和自減運算子
- C - 三元運算子
- C - sizeof 運算子
- C - 運算子優先順序
- C - 其他運算子
- C語言中的決策
- C - 決策
- C - if 語句
- C - if...else 語句
- C - 巢狀 if 語句
- C - switch 語句
- C - 巢狀 switch 語句
- C語言中的迴圈
- C - 迴圈
- C - while 迴圈
- C - for 迴圈
- C - do...while 迴圈
- C - 巢狀迴圈
- C - 無限迴圈
- C - break 語句
- C - continue 語句
- C - goto 語句
- C語言中的函式
- C - 函式
- C - 主函式
- C - 按值呼叫函式
- C - 按引用呼叫函式
- C - 巢狀函式
- C - 可變引數函式
- C - 使用者定義函式
- C - 回撥函式
- C - 返回語句
- C - 遞迴
- C語言中的作用域規則
- C - 作用域規則
- C - 靜態變數
- C - 全域性變數
- C語言中的陣列
- C - 陣列
- C - 陣列的特性
- C - 多維陣列
- C - 將陣列傳遞給函式
- C - 從函式返回陣列
- C - 可變長陣列
- C語言中的指標
- C - 指標
- C - 指標和陣列
- C - 指標的應用
- C - 指標運算
- C - 指標陣列
- C - 指向指標的指標
- C - 將指標傳遞給函式
- C - 從函式返回指標
- C - 函式指標
- C - 指向陣列的指標
- C - 指向結構體的指標
- C - 指標鏈
- C - 指標與陣列
- C - 字元指標和函式
- C - 空指標
- C - void 指標
- C - 野指標
- C - 解引用指標
- C - 近、遠和巨型指標
- C - 指標陣列的初始化
- C - 指標與多維陣列
- C語言中的字串
- C - 字串
- C - 字串陣列
- C - 特殊字元
- C語言中的結構體和聯合體
- C - 結構體
- C - 結構體和函式
- C - 結構體陣列
- C - 自引用結構體
- C - 查詢表
- C - 點(.)運算子
- C - 列舉(或 enum)
- C - 結構體填充和打包
- C - 巢狀結構體
- C - 匿名結構體和聯合體
- C - 聯合體
- C - 位域
- C - Typedef
- C語言中的檔案處理
- C - 輸入和輸出
- C - 檔案 I/O(檔案處理)
- C預處理器
- C - 預處理器
- C - 編譯指示
- C - 預處理器運算子
- C - 宏
- C - 標頭檔案
- C語言中的記憶體管理
- C - 記憶體管理
- C - 記憶體地址
- C - 儲存類
- 其他主題
- C - 錯誤處理
- C - 可變引數
- C - 命令執行
- C - 數學函式
- C - static 關鍵字
- C - 隨機數生成
- C - 命令列引數
- C程式設計資源
- C - 問答
- C - 快速指南
- C - 速查表
- C - 有用資源
- C - 討論
C語言運算子優先順序
C語言中的單個表示式可能包含多種不同型別的運算子。C編譯器根據運算子的優先順序和結合性來評估其值。
運算子的優先順序決定了它們在表示式中計算的順序。優先順序較高的運算子先計算。
例如,請看以下表達式:
x = 7 + 3 * 2;
這裡,乘法運算子“*”的優先順序高於加法運算子“+”。因此,首先執行乘法 3*2,然後將其結果加到 7 中,最終結果為“x = 13”。
下表列出了C語言中運算子的優先順序順序。這裡,優先順序最高的運算子位於表的上方,優先順序最低的運算子位於表的下方。
類別 | 運算子 | 結合性 |
---|---|---|
字尾 | () [] -> . ++ - - | 從左到右 |
一元 | + - ! ~ ++ -- (type)* & sizeof | 從右到左 |
乘法 | * / % | 從左到右 |
加法 | + - | 從左到右 |
移位 | << >> | 從左到右 |
關係 | < <= > >= | 從左到右 |
相等 | == != | 從左到右 |
按位與 | & | 從左到右 |
按位異或 | ^ | 從左到右 |
按位或 | | | 從左到右 |
邏輯與 | && | 從左到右 |
邏輯或 | || | 從左到右 |
條件 | ?: | 從右到左 |
賦值 | = += -= *= /= %=>>= <<= &= ^= |= | 從右到左 |
逗號 | , | 從左到右 |
在表示式中,優先順序較高的運算子將首先計算。
運算子結合性
在C語言中,運算子的結合性指的是在程式中表達式計算的方向(從左到右或從右到左)。當兩個具有相同優先順序的運算子出現在表示式中時,就會用到運算子的結合性。
在下面的示例中:
15 / 5 * 2
“/”(除法)和“*”(乘法)運算子具有相同的優先順序,因此計算順序將由結合性決定。
根據上表,乘法運算子的結合性是從左到右。因此,表示式將按以下方式計算:
(15 / 5) * 2
計算結果為:
3 * 2 = 6
示例 1
在以下程式碼中,乘法和除法運算子的優先順序高於加法運算子。
乘法運算子的從左到右結合性導致“b”和“c”相乘再除以“e”。然後將結果加到“a”的值上。
#include <stdio.h> int main(){ int a = 20; int b = 10; int c = 15; int d = 5; int e; e = a + b * c / d; printf("e : %d\n" , e ); return 0; }
輸出
執行此程式碼時,將產生以下輸出:
e: 50
示例 2
我們可以使用括號來更改計算順序。括號 () 在所有 C 運算子中具有最高優先順序。
#include <stdio.h> int main(){ int a = 20; int b = 10; int c = 15; int d = 5; int e; e = (a + b) * c / d; printf("e: %d\n", e); return 0; }
輸出
執行程式碼並檢查其輸出:
e: 90
在這個表示式中,首先計算括號中的 a 和 b 的加法。結果乘以 c,然後除以 d。
示例 3
在計算 e 的表示式中,我們將 a+b 放到一個括號中,將 c/d 放到另一個括號中,並將兩個結果相乘。
#include <stdio.h> int main(){ int a = 20; int b = 10; int c = 15; int d = 5; int e; e = (a + b) * (c / d); printf("e: %d\n", e ); return 0; }
輸出
執行此程式碼後,您將獲得以下輸出:
e: 90
字尾/字首自增/自減運算子的優先順序
“++”和“--”運算子分別充當自增和自減運算子。它們本質上是一元的,可以作為變數的字首或字尾使用。
當單獨使用時,以字首或字尾方式使用這些運算子具有相同的效果。換句話說,“a++”與“++a”具有相同的效果。但是,當這些“++”或“--”運算子與表示式中的其他運算子一起出現時,它們的行為會有所不同。
字尾自增和自減運算子的優先順序高於字首自增和自減運算子。
示例
以下示例展示瞭如何在 C 程式中使用自增和自減運算子:
#include <stdio.h> int main(){ int x = 5, y = 5, z; printf("x: %d \n", x); z = x++; printf("Postfix increment: x: %d z: %d\n", x, z); z = ++y; printf("Prefix increment. y: %d z: %d\n", y ,z); return 0; }
輸出
執行程式碼並檢查其輸出:
x: 5 Postfix increment: x: 6 z: 5 Prefix increment. y: 6 z: 6
邏輯運算子具有從左到右的結合性。但是,編譯器會評估確定表示式結果所需的最小運算元。因此,表示式的某些運算元可能不會被評估。
例如,請看以下表達式:
x > 50 && y > 50
這裡,第二個運算元“y > 50”僅在第一個表示式計算結果為真時才會被評估。