1樓:匿名使用者
c語言中,運算子的運算優先順序共分為15 級。1 級最高,15 級最低。 在表示式中,優先順序較高的先於優先順序較低的進行運算。
而在乙個運算量兩側的運算子 優先順序相同時,則按運算子的結合性所規定的結合方向處理。
各等級運算子如下:
(以下說明中,對傳統的1級和2級做了細化,1和2對應傳統1級,3和4對應傳統2級,所以細化說明共有17級。)
1、基本表示式 1級
基本表示式(primary expressions),主要是用於運算子之間,做為運算數。
標識,常量,字串文字量,優先順序提公升表示式最優先執行。
優先順序提公升表示式是指圓括號包圍的表示式,如「( expression )」
2、字尾表示式 2級
postfix-expression [ expression ],陣列下標運算。
postfix-expression ( argument-expression-list),函式呼叫,括號內的引數可選。
postfix-expression . identifier,成員訪問,
postfix-expression -> identifier,成員訪問,->號之前應為指標。
postfix-expression ++,字尾自增
postfix-expression --,字尾自減
( type-name )
( type-name ) 復合初始化,c99後新增。
3、單目/一元運算 3級
++ unary-expression 字首自增
-- unary-expression 字首自減
unary-operator cast-expression 單目轉型表式式, 包括 取位址& ,提領 * , 正號+ ,負號- 位反~ 邏輯否!。
sizeof unary-expression 求型別長度,對表示式求型別長度
sizeof ( type-name ) 求型別長度
4、強制型別表示式 4級
( type-name ) cast-expression,強制表示式成為type-name指定的型別。
5、乘法表示式 5級
「 * 」 乘法運算子;「 / 」除法運算子;「 % 」 取餘運算子。
6、加法運算子 6級
「 + 」加法運算子;「 - 」減法運算子。
7、移位運算子 7級
<< 左移運算子;>> 右移運算子。
8、關係運算子 8級
<、<=、>、>=關係運算子。
9、相等運算子 9級
「 == 」等於運算子;「 != 」不等於運算子。
10、位與運算子 10級
「 & 」按位與運算子
11、位異或運算子 11級
「 ∧ 」按位異或運算子(bitwise exclusive or operator)。
12、位或運算子 12 級
「 | 」按位或運算子(bitwise inclusive or operator)。
13、邏輯與運算子 13級
「&&」邏輯與運算子。
14、邏輯或運算子 14 級
「 || 」邏輯或運算子。
15、三元條件運算子 15級
? :條件運算子。
16、賦值運算子 16 級
=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=賦值運算子。
17、逗號運算子 17級
「,」逗號運算子。
具體可參見下圖:
2樓:匿名使用者
c語言運算子及其優先順序彙總表口訣
圓下箭頭一頓號
非凡增減富強針地長
三乘除,四加減,五移位
千萬別把魚忘記,它在盛飯的廚子裡
小燈大燈燈燈不等
爸餵魚,舅疑惑,裸雞也疑惑
十三姨,十四父,十五逗,兜到低
「圓下箭頭一頓號」指的是第15級的運算子。
正在裝載資料……
其中圓指的是運算子(),下指的是下標運算子,箭頭指的是指向結構體成員運算子->,頓號指的是結構體成員運算子、
「非凡增減富強針地長」指的是第14級的運算子。其中非指的是邏輯運算子!,凡指的是按位取反運算子~,增減指的是自增和自減運算子++和--,富指的是負號運算子-,強指的是型別轉換運算子(型別),針指的是指標運算子*,地指的是位址運算子&,長指的是長度運算子sizeof
「三乘除,四加減,五移位」 指的是第13級到第11級的運算子。其中三四五並無實際意義,只是起區分級別而已。也可以想象三指的是第13級運算子。
乘除指的是乘法運算子*和除法運算子/,加減指的是加法運算子+和減法運算子-,移位指的是左移運算子《和右移運算子》
「千萬別把魚忘記,它在盛飯的廚子裡」指的是求餘運算子%,它位於盛飯的廚子裡,即指和乘法運算子、除法運算子在一起。
「小燈大燈燈燈不等」 指的是第10級到第9級的運算子。其中小燈大燈指的是關係運算子<、<=、>和》=,燈燈指的是等於運算子==,不等指的是不等於運算子!=
「爸餵魚,舅疑惑,裸雞也疑惑」指的是第8級到第4級的運算子。其中,爸餵魚之指的是第8級的按位與運算子&,舅疑惑指的是第7級的按位異或運算子^和第6級的按位或運算子||,裸雞也疑惑指的是第5級、第4級的邏輯與運算子&&和邏輯或運算子||
「十三姨,十四父,十五逗,兜到低」 指的是第3級到第1級的運算子。其中,十三姨指的是條件運算子?: (三有雙重含義,即指?:
的優先級別是三,它的運算子型別也是三目,?難道不是姨即疑惑嗎?),十四父的十四沒有實際意義,父指的是賦值運算子=、+=、-=、*=、/=、%=、>>=、<<=、&=、 ^=和|= ,十五逗指的是第1級的運算子,兜到低指的是15級運算子以,結束。
附錄:c語言運算子及優先順序
優先順序 運算子 含義 運算子型別 結合方向
15 () 圓括號 單目 自左向右
下標運算子
—> 指向結構體成員運算子
、 結構體成員運算子
14 ! 邏輯非運算子 自右向左
~ 按位取反運算子
++ 自增運算子
-- 自減運算子
- 負號運算子
(型別) 型別轉換運算子
* 指標運算子
& 位址運算子
sizeof 長度運算子
13 * 乘法運算子 雙目 自左向右
/ 除法運算子
% 求餘運算子
12 + 加法運算子
- 減法運算子
11 << 左移運算子
>> 右移運算子
10 <、<=、>、>= 關係運算子
9 == 等於運算子
!= 不等於運算子
8 & 按位與運算子
7 ^ 按位異或運算子
6 | 按位或運算子
5 && 邏輯與運算子
4 || 邏輯或運算子
3 ?: 條件運算子 三目 自右向左
2 =、+=、-=、*=、
/=、%=、>>=、
<<=、&=、^=、|= 賦值運算子 雙目
1 , 逗號運算子 雙目 自左向右
②括號成員第一; //括號運算子() 成員運算子. ->
全體單目第二; //所有的單目運算子比如++ -- +(正) -(負) 指標運算*&
乘除余三,加減四; //這個"餘"是指取餘運算即%
移位五,關係六; //移位運算子:<< >> ,關係:> < >= <= 等
等於(與)不等排第七; //即== !=
位與異或和位或; //這幾個都是位運算: 位與(&)異或(^)位或(|)
"三分天下"**十;
邏輯或跟與 //邏輯運算子:|| 和 &&
十二和十一; //注意順序:優先順序(||) 底於 優先順序(&&)
條件高於賦值, //三目運算子優先順序排到 13 位只比賦值運算子和","高//需要注意的是賦值運算子很多!
逗號運算級最低! //逗號運算子優先順序最低
由於c語言的運算子優先順序與c++的不完全一樣(主要是增加了幾個運算子),所以這個口訣不能完全實用於c++.但是應該能夠相容,大家可以比較一下他們的區別應該就能夠很快掌握c++的優先順序的!
((*strdest++=*strsrc++)!='\0'); :
重點:++後增運算子優先順序高於*
1.*strdest++相當於 *(strdest++)
2.由於是後自增,故執行順序為:
*strdest=*strsrc
strdest++ strsrc++ //該級順序不明
將*strdest與'\0'比較 //即,整個表示式的值為*strdest與'\0'的比較結果
值得注意的是,對於賦值表示式,表示式本身的值等於左邊子表示式的值。
通過以上深入的分析,我們知道這個表示式完成了以下多個功能:
1.對於指標strdest, strsrc,將strsrc所指的記憶體空間的值賦給由strdest所指的記憶體空間。
2.判斷賦值後的strdest所指的記憶體空間的指是否等於0。
3.對於指標strdest,strsrc,他們的值分別加1,即指向下乙個元素。
即:該表示式實現了以下三個功能:
1.對於指標strdest, strsrc,將strsrc所指的記憶體空間的值賦給由strdest所指的記憶體空間。
2.判斷賦值後的strdest所指的記憶體空間的值是否等於0。
3.對於指標strdest,strsrc,他們的值分別加1,即指向下乙個元素。
c語言邏輯運算子優先順序,C語言的運算子的優先順序邏輯運算子條件運算子賦值運算子關係運算子算術運算子。它們之間的優先順序
4 3 復 5 2 由於 的優先順序高於 和 所以先計制算bai 5 在c中,的操作物件只有du0和1,如果zhi括號裡不為空,不為0或 0 則任dao何東西都被認為是1 所以 5 就等價於 1 也就是0 於是就變成了4 3 0 2.又由於 的級別較低,所以會判斷 4 3 和 0 2 前者為1,也後...
c語言中,關於運算子和優先順序的問題,具體見圖
都是1啊 0 2 2 0 1 1 2 0 2 2 0 1 2 2 0 2 0 1 依次是1,1,0 c語言指標及運算子優先順序的問題 先執行vp 由於 是在變數後面的,返回vp原來的值 沒有執行 前的值 將0賦值給 vp 如果是 vp 0,則將0賦值給已經加1的指標中位址 雁引愁心去,山銜好月來。c...
以下運算子中優先順序最高的運算子是abc
a選項,看下圖 不用全部記住,記住平時比較常用的就行了,還有記住 算術運算子 關係運算子 邏輯運算子 賦值運算子 a a是邏輯運算子,但c語言中規定它的優先順序最高,b是算數運算子,d也是邏輯運算子,c是個賦值的,優先順序是!算術運算子 關係運算子 邏輯運算子 a 優先順序一般c語言的書後都有附表的...