C語言運算子優先順序口訣
基本的優先順序需要記住:
指標最優,單目運算優於雙目運算。如正負號。
先乘除(模),後加減。
先算術運算,後移位運算,最後位運算。
請特別注意:1 << 3 + 2 & 7等價於 (1 << (3 + 2))&7.
邏輯運算最後計算。
C語言常用運算子的優先順序口訣是:“單算關邏條賦逗”;
如果加入位運算子,完整口訣是:“單算移關與,異或邏條賦”。
■“單”表示單目運算子:邏輯非(!),按位取反(~),自增(++),自減(--),取地址(&),取值(*);
■“算”表示算術運算子:乘、除和求餘(*,/,%)級別高於加減(+,-);
■“移”表示按位左移(<<)和位右移(>>);
■“關”表示關係運算符:大小關係(>,>=,<,<=)級別高於相等不相等關係(==,!=);
■“與”表示按位與(&);
■“異”表示按位異或(^);
■“或”表示按位或(|);
■“邏”表示邏輯運算子:邏輯與(&&)級別高於邏輯或(||);
■“條”表示條件運算子(? :);
■“賦”表示賦值運算子(=,+=,-=,*=,/=,%=,>>=,<<=,&=,^=, |=,!=);
◆另,逗號運算子(,) 級別最低,口訣中沒有表述,需另加記憶..
優先順序 |
運算子 |
名稱或含義 |
使用形式 |
結合方向 |
說明 |
1 |
後置++ |
後置自增運算子 |
變數名++ |
左到右 |
|
後置-- |
後置自減運算子 |
變數名-- |
|||
[ ] |
陣列下標 |
陣列名[整型表示式] |
|||
( ) |
圓括號 |
(表示式)/函式名(形參表) |
|||
. |
成員選擇(物件) |
物件.成員名 |
|||
-> |
成員選擇(指標) |
物件指標->成員名 |
|||
2 |
- |
負號運算子 |
-表示式 |
右到左 |
單目運算子 |
(型別) |
強制型別轉換 |
(資料型別)表示式 |
|||
前置++ |
前置自增運算子 |
++變數名 |
單目運算子 |
||
前置-- |
前置自減運算子 |
--變數名 |
單目運算子 |
||
* |
取值運算子 |
*指標表示式 |
單目運算子 |
||
& |
取地址運算子 |
&左值表示式 |
單目運算子 |
||
! |
邏輯非運算子 |
!表示式 |
單目運算子 |
||
~ |
按位取反運算子 |
~表示式 |
單目運算子 |
||
sizeof |
長度運算子 |
sizeof 表示式/sizeof(型別) |
|||
3 |
/ |
除 |
表示式/表示式 |
左到右 |
雙目運算子 |
* |
乘 |
表示式*表示式 |
雙目運算子 |
||
% |
餘數(取模) |
整型表示式%整型表示式 |
雙目運算子 |
||
4 |
+ |
加 |
表示式+表示式 |
左到右 |
雙目運算子 |
- |
減 |
表示式-表示式 |
雙目運算子 |
||
5 |
<< |
左移 |
表示式<<表示式 |
左到右 |
雙目運算子 |
>> |
右移 |
表示式>>表示式 |
雙目運算子 |
||
6 |
> |
大於 |
表示式>表示式 |
左到右 |
雙目運算子 |
>= |
大於等於 |
表示式>=表示式 |
雙目運算子 |
||
< |
小於 |
表示式<表示式 |
雙目運算子 |
||
<= |
小於等於 |
表示式<=表示式 |
雙目運算子 |
||
7 |
== |
等於 |
表示式==表示式 |
左到右 |
雙目運算子 |
!= |
不等於 |
表示式!= 表示式 |
雙目運算子 |
||
8 |
& |
按位與 |
整型表示式&整型表示式 |
左到右 |
雙目運算子 |
9 |
^ |
按位異或 |
整型表示式^整型表示式 |
左到右 |
雙目運算子 |
10 |
| |
按位或 |
整型表示式|整型表示式 |
左到右 |
雙目運算子 |
11 |
&& |
邏輯與 |
表示式&&表示式 |
左到右 |
雙目運算子 |
12 |
|| |
邏輯或 |
表示式||表示式 |
左到右 |
雙目運算子 |
13 |
?: |
條件運算子 |
表示式1? 表示式2: 表示式3 |
右到左 |
三目運算子 |
14 |
= |
賦值運算子 |
變數=表示式 |
右到左 |
|
/= |
除後賦值 |
變數/=表示式 |
|||
*= |
乘後賦值 |
變數*=表示式 |
|||
%= |
取模後賦值 |
變數%=表示式 |
|||
+= |
加後賦值 |
變數+=表示式 |
|||
-= |
減後賦值 |
變數-=表示式 |
|||
<<= |
左移後賦值 |
變數<<=表示式 |
|||
>>= |
右移後賦值 |
變數>>=表示式 |
|||
&= |
按位與後賦值 |
變數&=表示式 |
|||
^= |
按位異或後賦值 |
變數^=表示式 |
|||
|= |
按位或後賦值 |
變數|=表示式 |
|||
15 |
, |
逗號運算子 |
表示式,表示式,… |
左到右 |
從左向右順序運算 |
轉換說明符:
%a(%A) 浮點數、十六進位制數字和p-(P-)記數法(C99)
%c 字元
%d 有符號十進位制整數
%f 浮點數(包括float和doulbe)
%e(%E) 浮點數指數輸出[e-(E-)記數法]
%g(%G) 浮點數不顯無意義的零"0"
%i 有符號十進位制整數(與%d相同)
%u 無符號十進位制整數
%o 八進位制整數 e.g. 0123
%x(%X) 十六進位制整數0f(0F) e.g. 0x1234
%p 指標
%s 字串
%% "%"