當一個表達式包含多樣操作符時,操作符的優先級控制著單個操作符求值的順序。例如:表達式x+y*z按照x+(y*z)求值,因為“*”操作符比“+”操作符有更高的優先級。這和數學運算中的先乘除後加減是一致的。
表7-1總結了所有操作符從高到低的優先級順序。
表7-1 操作符從高到低的優先級順序
類別 操作符 初級操作符 (x) x.y f(x) a[x] x++ x-- new type of sizeof checked unchecked 一元操作符 + - ! ~ ++x --x (T)x 乘、除操作符 * / % 加減操作符 + - 移位操作符 << >> 關系操作符 < > <= >= is as 等式操作符 == != 邏輯與操作符 & 邏輯異或操作符 ^ 邏輯或操作符 | 條件與操作符 && 條件或操作符 || 條件操作符 ?: 賦值操作符 = *= /= %= += -= <<= >>= &= ^= |=當一個操作數出現在兩個有相同優先級的操作符之間時,操作符按照出現的順序由左到右執行。
除了賦值的操作符,所有的二進制的操作符都是左結合(left-associative)的,也就是說,操作按照從左向右的順序執行。例如:x+y+z按(x+y)+z進行求值。
賦值操作符和條件操作符(?:)按照右接合(right-associative)的原則,即操作按照從右向左的順序執行。如:x=y=z按照x=(y=z)進行求值。
建議在寫表達式的時候,如果無法確定操作符的有效順序,則盡量采用括號來保證運算的順序,這樣也使得程序一目了然,而且自己在編程時能夠思路清晰。