C語言中文網 目錄

C語言運算符優先級

一個表達式可以包含多個運算符。在這種情況下,運算符的優先級決定表達式的哪部分被處理為每個運算符的操作數。例如,按照運算規則,表達式中 *、/、以及 % 的優先級比 + 和 - 高。如下列表達式:

a - b * c

相當于 a-(b*c)。如果想讓操作數以不同的方式組合在一起,則必須使用括號:

(a - b) * c

如果一個表達式中的兩個操作數具有相同的優先級,那么它們的結合律(associativity)決定它們的組合方式是從左到右或是從右到左。例如,算術運算符和操作數的組合方式是從左到右,賦值運算符則是從右到左,如表 1 所示。

表1 運算符組合方式
表達式 結合律 組合方式
a/b%c 從左到右 (a/b)%c
a=b=c 從右到左 a=(b=c)

表 2 列出優先級次序下,所有 C 語言運算符的優先級和結合律

表2 運算符優先級和結合律
優先級 運算符 結合律
1 后綴運算符:[]    ()    ·    ->    ++    --(類型名稱){列表} 從左到右
2 一元運算符:++    --    !    ~    +    -    *    &    sizeof_Alignof 從右到左
3 類型轉換運算符:(類型名稱) 從右到左
4 乘除法運算符:*    /    % 從左到右
5 加減法運算符:+    - 從左到右
6 移位運算符:<<    >> 從左到右
7 關系運算符:<<=    >>= 從左到右
8 相等運算符:==    != 從左到右
9 位運算符 AND:& 從左到右
10 位運算符 XOR:^ 從左到右
11 位運算符 OR:| 從左到右
12 邏輯運算符 AND:&& 從左到右
13 邏輯運算符 OR:|| 從左到右
14 條件運算符:?: 從右到左
15 賦值運算符:
     =         +=        -=       *=       /=      %=       &=       ^=      |=   
   <<=      >>=
從右到左
16 逗號運算符:, 從左到右

表 2 中優先級最高的運算符中的最后一個(類型名稱){列表} 是 C99 新增加的。

一些運算符記號在表 2 中出現了兩次。例如,自增運算符 ++ 和自減運算符 --,在作后綴運算符(如表達式 x++)時,較其用作前綴運算符(如表達式 ++x)時,具有較高的優先級。

+、-、* 和 & 運算符記號不但可以當作一元運算符(unary operator,只需要一個操作數),也可以當作二元運算符(binary operator,需要兩個操作數)。例如,* 只有一個操作數的時候,就是間接運算符(indirection operator),而有兩個操作數的時候,就是乘號。

在這些例子中,一元運算符比二元運算符具有更高的優先級。例如,表達式 *ptrl**ptr2 等同于表達式(*ptrl)*(*ptr2)。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo