乙個表示式可以包含多個運算子。在這種情況下,運算子的優先順序決定表示式的哪部分被處理為每個運算子的運算元。例如,按照運算規則,表示式中 *、/、以及 % 的優先順序比 + 和 - 高。如下列表示式:
a - b * c
相當於 a -
(b * c)
如果想讓運算元以不同的方式組合在一起,則必須使用括號,如:
(a - b)
* c此時先計算a-b的值再與c相乘
如果乙個表示式中的兩個運算元具有相同的優先順序,那麼它們的結合律(associativity)決定它們的組合方式是從左到右或是從右到左。例如,算術運算子和運算元的組合方式是從左到右,賦值運算子則是從右到左,如表 1 所示。
表一
表示式結合率公式
a/b%c
從左到右
(a/b)%c
a=b=c
從右到左
a=(b=c )
表 2 列出優先順序次序下,所有 c 語言運算子的優先順序和結合律。
表二
優先順序運算子描述
結合律1
陣列下標
從左到右
()圓括號
.成員選擇(物件)
->
成員選擇(指標)
++字尾自加運算
--字尾自減運算
2(型別)
強制型別轉換
從右到左
-負號運算子
++前置自加運算
--前置自減運算
!邏輯非運算子
~按位取反運算子
*取值運算子
&取位址運算子
sizeof
長度運算子3*
乘從左到右/除
%餘數(取模)4+
加從左到右-減
5>>
右移從左到右
《左移6
>
大於從左到右
>=
大於等於
<
小於<=
小於等於7==
等於從左到右
!=不等於8&
按位與從左到右9^
按位異或
從左到右10|
按位或從左到右
11&&
邏輯與從左到右
12||
邏輯或從左到右
13?:
條件運算子
從右到左14=
賦值運算子
從右到左
/=除后賦值
*=乘後賦值
%=取模後賦值
+=加後賦值
-=減後賦值
<<=
左移後賦值
>>=
右移後賦值
&=按位與後賦值
^=按位異或後賦值
|=按位或後賦值15,
逗號運算子
從左到右
表 2 中優先順序最高的運算子中的最後乙個(型別名稱) 是 c99 新增加的。
一些運算子記號在表 2 **現了兩次。例如,自增運算子 ++ 和自減運算子 --,在作字尾運算子(如表示式 x++)時,較其用作字首運算子(如表示式 ++x)時,具有較高的優先順序。
+、-、* 和 & 運算子記號不但可以當作一元運算子(unary operator,只需要乙個運算元),也可以當作二元運算子(binary operator,需要兩個運算元)。例如,* 只有乙個運算元的時候,就是間接運算子(indirection operator),而有兩個運算元的時候,就是乘號。
C語言的算術優先順序
語言的i運算子包括單目運算子 雙目運算子 三目運算子,優先順序如下 第1優先順序 各種括號,如 等 成員運算子 第2優先順序 所有單目運算子,如 等 第3優先順序 乘法運算子 除法運算子 求餘運算子 第4優先順序 加法運算子 減法運算子 第5優先順序 移位運算子 第6優先順序 大於運算子 大於等於運...
c 語言優先順序
link blog id 2880933 寫 的時候,常會翻看的乙個表就是 c語言運算子優先順序表 c的運算子優先順序常常很讓人頭疼。其實,在大學裡學習c的時候,老師告訴大家這個不用一定背下來,用的時候可以找書,或者加小括號就可以了。我聽了,但是後來發現錯了。很多人都聽了,但不是每個人都發現這是錯的...
C語言優先順序
優先順序 運算子名稱或含義 使用形式 結合方向說明1 陣列下標 陣列名 常量表示式 左到右 圓括號 表示式 函式名 形參表 成員選擇 物件 物件.成員名 成員選擇 指標 物件指標 成員名2 負號運算子 表示式 右到左單目運算子 型別 強制型別轉換 資料型別 表示式 自增運算子 變數名 變數名 單目運...