丟臉啊,今天寫一道演算法題,第一次沒寫對。改了半天愣是沒看出來錯哪,後面說出了一下過程,突然發現是運算子優先順序惹得禍 if (!num % 2),!的運算優先順序高於%,啊啊啊,喪心病狂我找了十來分鐘,把老臉都給丟盡了。為了避免這種低階錯誤, 所以寫下這篇部落格鞏固一下運算子優先順序。
不叨叨,直接上表。
優先順序
運算子
名稱
使用方法
運算順序
說明
1
陣列下標
陣列名[整型表示式]
左到右
()
圓括號
(表示式)/函式名(形參表)
.
成員選擇(物件)
物件.成員名
->
成員選擇(指標)
物件指標->成員名
2
-
負號運算子
-算術型別表示式
右到左
單目運算子
(type)
強制型別轉換
(純量資料型別)純量表示式
++
自增運算子
++純量型別可修改左值表示式
單目運算子
--
自減運算子
--純量型別可修改左值表示式
單目運算子
*
取值運算子
*指標型別表示式
單目運算子
&
取位址運算子
&表示式
單目運算子
!
邏輯非運算子
!純量型別表示式
單目運算子
~
按位取反運算子
~整型表示式
單目運算子
sizeof
長度運算子
sizeof 表示式
sizeof(型別)
3/除
表示式/表示式
左到右雙目運算子
*
乘
表示式*表示式
雙目運算子
%
餘數(取模)
整型表示式%整型表示式
雙目運算子
4
+
加
表示式+表示式
左到右
雙目運算子
-
減
表示式-表示式
雙目運算子
5
<<
左移
整型表示式《整型表示式
左到右
雙目運算子
>>
右移
整型表示式》整型表示式
雙目運算子
6
>
大於
表示式》表示式
左到右
雙目運算子
>=
大於等於
表示式》=表示式
雙目運算子
<
小於
表示式《表示式
雙目運算子
<=
小於等於
表示式<=表示式
雙目運算子
7
==
等於
表示式==表示式
左到右
雙目運算子
!=
不等於
表示式!= 表示式
雙目運算子
8
&
按位與
整型表示式&整型表示式
左到右
雙目運算子
9
^
按位異或
整型表示式^整型表示式
左到右
雙目運算子
10
|
按位或
整型表示式|整型表示式
左到右
雙目運算子
11
&&
邏輯與
表示式&&表示式
左到右
雙目運算子
12
||
邏輯或
表示式||表示式
左到右
雙目運算子
13
?:
條件運算子
表示式1? 表示式2: 表示式3
右到左
三目運算子
14
=
賦值運算子
可修改左值表示式=表示式
右到左
op=/=
除后賦值
可修改左值表示式/=表示式
op=*=
乘後賦值
可修改左值表示式*=表示式
op=%=
取模後賦值
可修改左值表示式%=表示式
op=+=
加後賦值
可修改左值表示式+=表示式
op=-=
減後賦值
可修改左值表示式-=表示式
op=
<<=
左移後賦值
可修改左值表示式<<=表示式
op=
>>=
右移後賦值
可修改左值表示式》=表示式
op=&=
按位與後賦值
可修改左值表示式&=表示式
op=
^=
按位異或後賦值
可修改左值表示式^=表示式
op=|=
按位或後賦值
可修改左值表示式|=表示式
op=
注意到了嗎?並不是所有的邏輯運算子都在算數運算子後面 !這玩意就是特例,而且,邏輯運算子也是有優先順序的(離散數學裡講過)所以運算子優先順序應該是
! > 算術 > 關係 > && > || > 三目 > 賦值 > op=
C語言運算子優先順序 備忘
今天居然在優先順序上栽了個跟頭,浪費了大約1個小時時間,真是慚愧.還是把這個東西記錄一下,不過以後還是注意多加括號.優先順序運算子名稱或含義 使用形式 結合方向說明1 陣列下標 陣列名 常量表示式 左到右 圓括號 表示式 函式名 形參表 成員選擇 物件 物件.成員名 成員選擇 指標 物件指標 成員名...
運算子優先順序 C 運算子優先順序
c 運算子優先順序 優先順序運算子 描述方向1 scope resolution 範圍解析 left to right 2 suffix postfix increment and decrement 字首 字尾遞增和遞減 function call 函式呼叫 array subscripting ...
C語言運算子優先順序
優先順序運算子 名稱或含義 使用形式 結合方向說明1 陣列下標 陣列名 常量表示式 左到右 圓括號 表示式 函式名 形參表 成員選擇 物件 物件.成員名 成員選擇 指標 物件指標 成員名2 負號運算子 表示式 右到左單目運算子 型別 強制型別轉換 資料型別 表示式 自增運算子 變數名 變數名 單目運...