同一優先順序的運算子,運算次序由結合方向所決定。
c語言中大多數運算子的結合性都是從左往右,只有三個運算子是從右往左的。乙個是單目運算子,另乙個是三目運算子,還有乙個就是雙目運算子中的賦值運算子=
。雙目運算子中只有賦值運算子的結合性是從右往左的,其他的都是從左往右。
優先順序運算子
名稱或含義
使用形式
結合方向
說明陣列下標
陣列名[常量表示式]
左到右圓括號
(表示式)
函式名(形參表)
成員選擇(物件)
物件.成員名
成員選擇(指標)
物件指標->成員名
負號運算子
-表示式
右到左單目運算子
(型別)
強制型別轉換
(資料型別)表示式
自增運算子
++變數名
變數名++
單目運算子
自減運算子
--變數名
變數名--
單目運算子
取值運算子
*指標變數
單目運算子
取位址運算子
&變數名
單目運算子
邏輯非運算子
!表示式
單目運算子
按位取反運算子
~表示式
單目運算子
sizeof
長度運算子
sizeof(表示式)
除表示式 / 表示式
左到右雙目運算子
乘表示式*表示式
雙目運算子
餘數(取模)
整型表示式%整型表示式
雙目運算子
加表示式+表示式
左到右雙目運算子
減表示式-表示式
雙目運算子
左移變數《表示式
左到右雙目運算子
右移變數》表示式
雙目運算子
大於表示式》表示式
左到右雙目運算子
大於等於
表示式》=表示式
雙目運算子
小於表示式《表示式
雙目運算子
小於等於
表示式<=表示式
雙目運算子
等於表示式==表示式
左到右雙目運算子
不等於表示式!= 表示式
雙目運算子
按位與表示式&表示式
左到右雙目運算子
按位異或
表示式^表示式
左到右雙目運算子
按位或表示式|表示式
左到右雙目運算子
邏輯與表示式&&表示式
左到右雙目運算子
邏輯或表示式||表示式
左到右雙目運算子
條件運算子
表示式1? 表示式2: 表示式3
右到左三目運算子
賦值運算子
變數=表示式
右到左除後賦值
變數/=表示式
乘後賦值
變數*=表示式
取模後賦值
變數%=表示式
加後賦值
變數+=表示式
減後賦值
變數-=表示式
左移後賦值
變數<<=表示式
右移後賦值
變數》=表示式
按位與後賦值
變數&=表示式
按位異或後賦值
變數^=表示式
按位或後賦值
變數|=表示式
逗號運算子
表示式,表示式,…
左到右上表中可以總結出如下規律:
結合方向只有三個是從右往左,其餘都是從左往右。
所有雙目運算子中只有賦值運算子的結合方向是從右往左。
另外兩個從右往左結合的運算子也很好記,因為它們很特殊:乙個是單目運算子,乙個是三目運算子。
c語言中有且只有乙個三目運算子。
逗號運算子的優先順序最低,要記住。
此外要記住,對於優先順序:算術運算子 > 關係運算子 > 邏輯運算子 > 賦值運算子。邏輯運算子中「邏輯非 !」除外。
優先順序問題
表示式經常誤認為的結果
實際結果
. 的優先順序高於 *(-> 操作符用於消除這個問題)
*p.f
p 所指物件的字段 f,等價於:
(*p).f
對 p 取 f 偏移,作為指標,然後進行解除引用操作,等價於:
*(p.f)
高於 *
int *ap
ap 是個指向 int 陣列的指標,等價於:
int (*ap)
ap 是個元素為 int 指標的陣列,等價於:
int *(ap )
函式 () 高於 *
int *fp()
fp 是個函式指標,所指函式返回 int,等價於:
int (*fp)()
fp 是個函式,返回 int*,等價於:
int* ( fp() )
== 和 != 高於位操作
(val & mask != 0)
(val &mask) != 0
val & (mask != 0)
== 和 != 高於賦值符
c = getchar() != eof
(c = getchar()) != eof
c = (getchar() != eof)
算術運算子高於位移 運算子
msb << 4 + lsb
(msb << 4) + lsb
msb << (4 + lsb)
逗號運算子在所有運 算符中優先順序最低
i = 1, 2
i = (1,2)
(i = 1), 2
C語言運算子優先順序表
c運算子優先順序 運算子描述 結合性1 字尾遞增運算子 從左到右 字尾遞減運算子 呼叫運算子 圓括號 下標引用運算子 組合文字 成員選擇 物件 成員選擇 指標 2 字首遞增運算子 從右到左 字首遞減運算子 負號運算子 正號運算子 按位求反運算子 邏輯非運算子 sizeof 長度運算子 取值運算子 取...
C語言運算子優先順序表
優先順序 運算子 名稱或含義 使用形式 結合方向 說明 1 陣列下標 陣列名 常量表示式 左到右 圓括號 表示式 函式名 形參表 成員選擇 物件 物件.成員名 成員選擇 指標 物件指標 成員名 2 負號運算子 常量 右到左 單目運算子 型別 強制型別轉換 資料型別 表示式 自增運算子 變數名 變數名...
運算子優先順序 C 運算子優先順序
c 運算子優先順序 優先順序運算子 描述方向1 scope resolution 範圍解析 left to right 2 suffix postfix increment and decrement 字首 字尾遞增和遞減 function call 函式呼叫 array subscripting ...