C語言運算符優先級

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

  C++運算符優先級



發佈了77 篇原創文章 · 獲贊 110 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章