C語言再學習12——運算符

前言:

爲了方便查看博客,特意申請了一個公衆號,附上二維碼,有興趣的朋友可以關注,和我一起討論學習,一起享受技術,一起成長。

在這裏插入圖片描述


1. 運算符的優先級

優先級 運算符 名稱 使用 結合方向 備註
1 [] 數組下標 數組名 左->右
1 () 圓括號 (表達式)/函數名(形參) 左->右
1 . 成員選擇(對象) 對象.成員名 左->右
1 -> 成員選擇(指針) 對象指針->成員名 左->右
2 - 負號運算符 -表達式 右->左 單目
2 (類型) 強制類型轉換 (數據類型)表達式 右->左 單目
2 ++ 自增 ++變量名/變量名++ 右->左 單目
2 自減 –變量名/變量名– 右->左 單目
2 * 取值 *指針變量 右->左 單目
2 & 取地址 &變量名 右->左 單目
2 邏輯非 !表達式 右->左 單目
2 ~ 按位取反 ~表達式 右->左 單目
2 sizeof 長度運算符 sizeof(表達式) 右->左 單目
3 / 表達式/表達式 左->右 雙目
3 * 表達式*表達式 左->右 雙目
3 % 餘數(取模) 整型表達式/整型表達式 左->右 雙目
4 + 表達式+表達式 左->右 雙目
4 - 表達式-表達式 左->右 雙目
5 << 左移 變量<<表達式 左->右 雙目
5 >> 右移 變量>>表達式 左->右 雙目
6 > 大於 表達式>表達式 左->右 雙目
6 >= 大於等於 表達式>=表達式 左->右 雙目
6 < 小於 表達式<表達式 左->右 雙目
6 <= 小於等於 表達式<=表達式 左->右 雙目
7 == 等於 表達式==表達式 左->右 雙目
7 != 不等於 表達式!=表達式 左->右 雙目
8 & 按位與 表達式&表達式 左->右 雙目
9 ^ 按位異或 表達式^表達式 左->右 雙目
10 I 按位或 表達式I表達式 左->右 雙目
11 && 邏輯與 表達式&&表達式 左->右 雙目
12 II 邏輯或 表達式II表達式 左->右 雙目
13 ?: 條件運算符 表達式1?表達式2:表達式3 右->左 三目
14 = 賦值 變量=表達式 右->左
14 /= 除後賦值 變量/=表達式 右->左
14 *= 乘後賦值 變量*=表達式 右->左
14 %= 取模後賦值 變量%=表達式 右->左
14 += 加後賦值 變量+=表達式 右->左
14 -= 減後賦值 變量-=表達式 右->左
14 <<= 左移後賦值 變量<<=表達式 右->左
14 >>= 右移後賦值 變量>>=表達式 右->左
14 &= 按位與後賦值 變量&=表達式 右->左
14 ^= 按位異或後賦值 變量^=表達式 右->左
14 I= 按位或後賦值 變量I=表達式 右->左
15 , 逗號運算符 表達式,表達式, 左->右 從左往右

2. 理解運算符優先級

優先級問題 表達式 誤解 正解
. 的優先級高於*/->操作符 *p.f (*p).f *(p.f),對p取f的偏移,作爲指針,然後進行解除引用操作
[] 高於* int *ap[] int (*ap)[] int *(ap[]),ap是元素爲int指針數組
函數()高於* int *fp() int (*fp)() int *(fp()),fp是個函數,返回值爲int *
== 和!=高於位操作 (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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章