C語言中的運算符和結合性問題
C語言運算符和結合性
優(yōu)先級 | 運算符 | 含義 | 要求運算對象的個數 | 結合方向 |
---|---|---|---|---|
1 | () | 圓括號 | 自左至右 | |
1 | [] | 下標運算符 | 自左至右 | |
1 | -> | 指向結構體成員運算符 | 自左至右 | |
1 | · | 結構體成員運算符 | 自左至右 | |
2 | ! | 邏輯非運算符 | 1(單目運算符) | 自右至左 |
2 | ~ | 按位取反運算符 | 1(單目運算符) | 自右至左 |
2 | ++ | 自增運算符 | 1(單目運算符) | 自右至左 |
2 | -- | 自減運算符 | 1(單目運算符) | 自右至左 |
2 | - | 負號運算符 | 1(單目運算符) | 自右至左 |
2 | (類型) | 類型轉換運算符 | 1(單目運算符) | 自右至左 |
2 | * | 指針運算符 | 1(單目運算符) | 自右至左 |
2 | & | 取地址運算符 | 1(單目運算符) | 自右至左 |
2 | sizeof | 長度運算符 | 1(單目運算符) | 自右至左 |
3 | * | 乘法運算符 | 2(雙目運算符) | 自左至右 |
3 | / | 除法運算符 | 2(雙目運算符) | 自左至右 |
3 | % | 求余運算符 | 2(雙目運算符) | 自左至右 |
4 | + | 加法運算符 | 2(雙目運算符) | 自左至右 |
4 | - | 減法運算符 | 2(雙目運算符) | 自左至右 |
5 | << | 左移運算符 | 2(雙目運算符) | 自左至右 |
5 | >> | 左移運算符 | 2(雙目運算符) | 自左至右 |
6 | < <= > >= | 關系運算符 | 2(雙目運算符) | 自左至右 |
7 | == | 等于運算符 | 2(雙目運算符) | 自左至右 |
7 | != | 不等于運算符 | 2(雙目運算符) | 自左至右 |
8 | & | 按位與運算符 | 2(雙目運算符) | 自左至右 |
9 | ^ | 按位異或運算符 | 2(雙目運算符) | 自左至右 |
10 | | | 按位或運算符 | 2(雙目運算符) | 自左至右 |
11 | && | 邏輯與運算符 | 2(雙目運算符) | 自左至右 |
12 | || | 邏輯或運算符 | 2(雙目運算符) | 自左至右 |
13 | ? : | 條件運算符 | 3(三目運算符) | 自右至左 |
14 | = += -= *= /= %= >>= <<= &= ^= |= | 賦值運算符 | 2(二目運算符) | 自右至左 |
15 | , | 逗號運算符(順序求值運算符) | 自左至右 |
同一優(yōu)先級的運算符,運算次序由結合方向決定。
-
和++
為同一優(yōu)先級,結合方向為自右至左,因此-i++
相當于-(i++)
;
不同的運算符要求有不同的運算對象個數,如+
和-
為雙目運算符,要求在運算符兩側各有一個運算對象(3+5
)。
而++
和-
(負號)運算符是單目運算符,只能在運算符的一側出現一個運算對象(如-a
、i++
、--i
、(float)i
、sizeof(int)
、*p
等)。
條件運算符是C語言中唯一的三木運算符,如x?a:b
。
從上表中可以大致歸納出各類運算符的優(yōu)先級
以上的優(yōu)先級別由上到下遞減。初等運算符優(yōu)先級最高,逗號運算符優(yōu)先級最低。
位運算符的優(yōu)先級比較分散(有的在算術運算符之前(如~
),有的在關系運算符之前(如<<
和>>
),有的在關系運算符之后(如&
、^
、|
))。
為了容易記憶,使用位運算符時可加圓括號。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。