c語言符號優先級


1級優先級 左結合
  () 圓括號
  [] 下標運算符
  -> 指向結構體成員運算符
  . 結構體成員運算符
  2級優先級 右結合
  ! 邏輯非運算符
  ~ 按位取反運算符
  ++ 前綴增量運算符
  -- 前綴增量運算符
  + 正號運算符
  - 負號運算符
  (類型) 類型轉換運算符
  * 指針運算符
  & 地址與運算符
  sizeof 長度運算符
  3級優先級 左結合
  * 乘法運算符
  / 除法運算符
  % 取余運算符
  4級優先級 左結合
  + 加法運算符
  - 減法運算符
  5級優先級 左結合
  << 左移運算符
  >> 右移運算符
  6級優先級 左結合
  <、<=、>、>= 關系運算符
  7級優先級 左結合
  == 等於運算符
  != 不等於運算符
  8級優先級 左結合
  & 按位與運算符
  9級優先級 左結合
  ^ 按位異或運算符
  10級優先級 左結合
  | 按位或運算符
  11級優先級 左結合
  && 邏輯與運算符
  12級優先級 左結合
  || 邏輯或運算符
  13級優先級 右結合
  ? : 條件運算符
  14級優先級 右結合
  = += -= *= /= %= &= ^= |= <<= >>= 全為賦值運算符
  15級優先級 左結合
  , 逗號運算符
  優先級從上到下依次遞減,最上面具有最高的優先級,逗號操作符具有最低的優先級。
  所有的優先級中,只有三個優先級是從右至左結合的,它們是單目運算符、條件運算符、賦值運算符。其它的都是從左至右結合。
  具有最高優先級的其實並不算是真正的運算符,它們算是一類特殊的操作。()是與函數相關,[]與數組相關,而->及.是取結構成員。
  其次是單目運算符,所有的單目運算符具有相同的優先級,因此在我認為的 真正的運算符中它們具有最高的優先級,又由於它們都是從右至左結合的,因此*p++與*(p++)等效是毫無疑問的。
  另外在C語言里 沒有前置后置之分 因為++ --- 是右結合所以 右側優先運算 表現為 "后置優先級比較高" 的假象 前置和后置的區分是因為運算符重載而后加入C++的
  接下來是算術運算符,*、/、%的優先級當然比+、-高了。
  移位運算符緊隨其后。
  其次的關系運算符中,< <= > >=要比 == !=高一個級別,不大好理解。
  所有的邏輯操作符都具有不同的優先級(單目運算符出外,!和~)
  邏輯位操作符的"與"比"或"高,而"異或"則在它們之間。
  跟在其后的&&比||高。
  接下來的是條件運算符,賦值運算符及逗號運算符。
  在C語言中,只有4個運算符規定了運算方向,它們是&&、| |、條件運算符及賦值運算符。
  &&、| |都是先計算左邊表達式的值,當左邊表達式的值能確定整個表達式的值時,就不再計算右邊表達式的值。如 a = 0 && b; &&運算符的左邊位0,則右邊表達式b就不再判斷。
  在條件運算符中。如a?b:c;先判斷a的值,再根據a的值對b或c之中的一個進行求值。
  賦值表達式則規定先對右邊的表達式求值,因此使 a = b = c = 6;成為可能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM