C語言運算優先級

優先級編輯

優先級從上到下依次遞減,最上面具有最高的優先級,逗號操作符具有最低的優先級。
相同優先級中,按結合順序計算。大多數運算是從左至右計算,只有三個優先級是從右至左結合的,它們是單目運算符、條件運算符、賦值運算符。
基本的優先級需要記住:
指針最優,單目運算優於雙目運算。如正負號。
先乘除(模),後加減。
先算術運算,後移位運算,最後位運算。請特別注意:1 << 3 + 2 & 7等價於 (1 << (3 + 2))&7.
邏輯運算最後計算。


編輯

優先級
運算符
名稱或含義
使用形式
結合方向
說明
1
[]
數組下標
數組名[整型表達式]
左到右

()
圓括號
(表達式)/函數名(形參表)

.
成員選擇(對象)
對象.成員名

->
成員選擇(指針)
對象指針->成員名

2
-
負號運算符
-表達式
右到左
單目運算符
(類型)
強制類型轉換
(數據類型)表達式

++
自增運算符
++變量名/變量名++
單目運算符
--
自減運算符
--變量名/變量名--
單目運算符
*
取值運算符
*指針表達式
單目運算符
&
取地址運算符
&左值表達式
單目運算符
!
邏輯非運算符
!表達式
單目運算符
~
按位取反運算符
~表達式
單目運算符
sizeof
長度運算符
sizeof 表達式/sizeof(類型)

3
/
表達式/表達式
左到右
雙目運算符
*
表達式*表達式
雙目運算符
%
餘數(取模)
整型表達式%整型表達式
雙目運算符
4
+
表達式+表達式
左到右
雙目運算符
-
表達式-表達式
雙目運算符
5
<<
左移
表達式<<表達式
左到右
雙目運算符
>>
右移
表達式>>表達式
雙目運算符
6
>
大於
表達式>表達式
左到右
雙目運算符
>=
大於等於
表達式>=表達式
雙目運算符
<
小於
表達式<表達式
雙目運算符
<=
小於等於
表達式<=表達式
雙目運算符
7
==
等於
表達式==表達式
左到右
雙目運算符
!=
不等於
表達式!= 表達式
雙目運算符
8
&
按位與
整型表達式&整型表達式
左到右
雙目運算符
9
^
按位異或
整型表達式^整型表達式
左到右
雙目運算符
10
|
按位或
整型表達式|整型表達式
左到右
雙目運算符
11
&&
邏輯與
表達式&&表達式
左到右
雙目運算符
12
||
邏輯或
表達式||表達式
左到右
雙目運算符
13
?:
條件運算符
表達式1? 表達式2: 表達式3
右到左
三目運算符
14
=
賦值運算符
變量=表達式
右到左

/=
除後賦值
變量/=表達式

*=
乘後賦值
變量*=表達式

%=
取模後賦值
變量%=表達式

+=
加後賦值
變量+=表達式

-=
減後賦值
變量-=表達式

<<=
左移後賦值
變量<<=表達式

>>=
右移後賦值
變量>>=表達式

&=
按位與後賦值
變量&=表達式

^=
按位異或後賦值
變量^=表達式

|=
按位或後賦值
變量|=表達式

15
,
逗號運算符
表達式,表達式,…
左到右
從左向右順序運算
以下部分錯誤:

結合性
() [] -> . ++(後綴自增) --(後綴自減)
left to right
! ~ ++(前綴自增) --(前綴自減) + - * sizeof(type)
right to left
* / %

  

  

  
left
to
right
+ -
<< >>
< <= > >=
== !=
&
^
|
&&
||
? : (條件運算)
right to left
= += -= *= /= %= &= ^= |= <<= >>=

left to right
接下來是算術運算符,*、/、%的優先級當然比+、-高了。
移位運算符緊隨其後。
其次的關係運算符中,< <= > >=要比 == !=高一個級別,不大好理解。
所有的邏輯操作符都具有不同的優先級(單目運算符除外,!和~)
邏輯位操作符的"與"比"或"高,而"異或"則在它們之間。
跟在其後的&&比||高。
接下來的是條件運算符,賦值運算符及逗號運算符。
在C語言中,只有4個運算符規定了運算方向,它們是&&、| |、條件運算符及逗號運算符。
&&、| |都是先計算左邊表達式的值,當左邊表達式的值能確定整個表達式的值時,就不再計算右邊表達式的值。如 a = 0 && b; &&運算符的左邊位爲0,則右邊表達式b就不再判斷。
在條件運算符中。如a?b:c;先判斷a的值,再根據a的值對b或c之中的一個進行求值。
逗號表達式則規定從左到右依次進行求值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章