C語(yǔ)言運(yùn)算符及其優(yōu)先級(jí)匯總表口訣
C語(yǔ)言運(yùn)算符及其優(yōu)先級(jí)匯總表口訣
圓下箭頭一頓號(hào)
非凡增減富強(qiáng)針地長(zhǎng)
三乘除,四加減,五移位
千萬(wàn)別把魚(yú)忘記,它在盛飯的廚子里
小燈大燈燈燈不等
爸喂魚(yú),舅疑惑,裸雞也疑惑
十三姨,十四父,十五逗,兜到低
“圓下箭頭一頓號(hào)”指的是第15級(jí)的運(yùn)算符。其中圓指的是運(yùn)算符(),下指的是下標(biāo)運(yùn)算符[],箭頭指的是指向結(jié)構(gòu)體成員運(yùn)算符->,頓號(hào)指的是結(jié)構(gòu)體成員運(yùn)算符、
“非凡增減富強(qiáng)針地長(zhǎng)”指的是第14級(jí)的運(yùn)算符。其中非指的是邏輯運(yùn)算符!,凡指的是按位取反運(yùn)算符~,增減指的是自增和自減運(yùn)算符++和--,富指的是負(fù)號(hào)運(yùn)算符-,強(qiáng)指的是類(lèi)型轉(zhuǎn)換運(yùn)算符(類(lèi)型),針指的是指針運(yùn)算符*,地指的是地址運(yùn)算符&,長(zhǎng)指的是長(zhǎng)度運(yùn)算符Sizeof
“三乘除,四加減,五移位” 指的是第13級(jí)到第11級(jí)的運(yùn)算符。其中三四五并無(wú)實(shí)際意義,只是起區(qū)分級(jí)別而已。也可以想象三指的是第13級(jí)運(yùn)算符。乘除指的是乘法運(yùn)算符*和除法運(yùn)算符/,加減指的是加法運(yùn)算符+和減法運(yùn)算符-,移位指的是左移運(yùn)算符<<和右移運(yùn)算符>>
“千萬(wàn)別把魚(yú)忘記,它在盛飯的廚子里”指的是求余運(yùn)算符%,它位于盛飯的廚子里,即指和乘法運(yùn)算符、除法運(yùn)算符在一起。
“小燈大燈燈燈不等” 指的是第10級(jí)到第9級(jí)的運(yùn)算符。其中小燈大燈指的是關(guān)系運(yùn)算符<、<=、>和>=,燈燈指的是等于運(yùn)算符==,不等指的是不等于運(yùn)算符!=
“爸喂魚(yú),舅疑惑,裸雞也疑惑”指的是第8級(jí)到第4級(jí)的運(yùn)算符。其中,爸喂魚(yú)之指的是第8級(jí)的按位與運(yùn)算符&,舅疑惑指的是第7級(jí)的按位異或運(yùn)算符^和第6級(jí)的按位或運(yùn)算符||,裸雞也疑惑指的是第5級(jí)、第4級(jí)的邏輯與運(yùn)算符&&和邏輯或運(yùn)算符||
“十三姨,十四父,十五逗,兜到低” 指的是第3級(jí)到第1級(jí)的運(yùn)算符。其中,十三姨指的是條件運(yùn)算符?: (三有雙重含義,即指?:的優(yōu)先級(jí)別是三,它的運(yùn)算符類(lèi)型也是三目,?難道不是姨即疑惑嗎?),十四父的十四沒(méi)有實(shí)際意義,父指的是賦值運(yùn)算符=、+=、-=、*=、/=、%=、>>=、<<=、&=、 ^=和|= ,十五逗指的是第1級(jí)的運(yùn)算符,兜到低指的是15級(jí)運(yùn)算符以,結(jié)束。
附錄:C語(yǔ)言運(yùn)算符及優(yōu)先級(jí)
優(yōu)先級(jí) 運(yùn)算符 含義 運(yùn)算符類(lèi)型 結(jié)合方向
15 () 圓括號(hào) 單目 自左向右
[] 下標(biāo)運(yùn)算符
—> 指向結(jié)構(gòu)體成員運(yùn)算符
、 結(jié)構(gòu)體成員運(yùn)算符
14 ! 邏輯非運(yùn)算符 自右向左
~ 按位取反運(yùn)算符
++ 自增運(yùn)算符
-- 自減運(yùn)算符
- 負(fù)號(hào)運(yùn)算符
(類(lèi)型) 類(lèi)型轉(zhuǎn)換運(yùn)算符
* 指針運(yùn)算符
& 地址運(yùn)算符
Sizeof 長(zhǎng)度運(yùn)算符
13 * 乘法運(yùn)算符 雙目 自左向右
/ 除法運(yùn)算符
% 求余運(yùn)算符
12 + 加法運(yùn)算符
- 減法運(yùn)算符
11 << 左移運(yùn)算符
>> 右移運(yùn)算符
10 <、<=、>、>= 關(guān)系運(yùn)算符
9 == 等于運(yùn)算符
!= 不等于運(yùn)算符
8 & 按位與運(yùn)算符
7 ^ 按位異或運(yùn)算符
6 | 按位或運(yùn)算符
5 && 邏輯與運(yùn)算符
4 || 邏輯或運(yùn)算符
3 ?: 條件運(yùn)算符 三目 自右向左
2 =、+=、-=、*=、
/=、%=、>>=、
<<=、&=、^=、|= 賦值運(yùn)算符 雙目
1 , 逗號(hào)運(yùn)算符 雙目 自左向右
②
括號(hào)成員第一; //括號(hào)運(yùn)算符[]() 成員運(yùn)算符. ->
全體單目第二; //所有的單目運(yùn)算符比如++ -- +(正) -(負(fù)) 指針運(yùn)算*&
乘除余三,加減四; //這個(gè)"余"是指取余運(yùn)算即%
移位五,關(guān)系六; //移位運(yùn)算符:<< >> ,關(guān)系:> < >= <= 等
等于(與)不等排第七; //即== !=
位與異或和位或; //這幾個(gè)都是位運(yùn)算: 位與(&)異或(^)位或(|)
"三分天下"八九十;
邏輯或跟與 //邏輯運(yùn)算符:|| 和 &&
十二和十一; //注意順序:優(yōu)先級(jí)(||) 底于 優(yōu)先級(jí)(&&)
條件高于賦值, //三目運(yùn)算符優(yōu)先級(jí)排到 13 位只比賦值運(yùn)算符和","高//需要注意的是賦值運(yùn)算符很多!
逗號(hào)運(yùn)算級(jí)最低! //逗號(hào)運(yùn)算符優(yōu)先級(jí)最低
由于C語(yǔ)言的運(yùn)算符優(yōu)先級(jí)與C++的不完全一樣(主要是增加了幾個(gè)運(yùn)算符),所以這個(gè)口訣不能完全實(shí)用于C++.但是應(yīng)該能夠兼容,大家可以比較一下他們的區(qū)別應(yīng)該就能夠很快掌握C++的優(yōu)先級(jí)的!
((*strDest++=*strSrc++)!='\0'); :
重點(diǎn):++后增運(yùn)算符優(yōu)先級(jí)高于*
1.*strDest++相當(dāng)于 *(strDest++)
2.由于是后自增,故執(zhí)行順序?yàn)椋?
*strDest=*strSrc
strDest++ strsrc++ //該級(jí)順序不明
將*strDest與'\0'比較 //即,整個(gè)表達(dá)式的值為*strDest與'\0'的比較結(jié)果
值得注意的是,對(duì)于賦值表達(dá)式,表達(dá)式本身的值等于左邊子表達(dá)式的值。
通過(guò)以上深入的分析,我們知道這個(gè)表達(dá)式完成了以下多個(gè)功能:
1.對(duì)于指針strDest, strSrc,將strSrc所指的內(nèi)存空間的值賦給由strDest所指的內(nèi)存空間。
2.判斷賦值后的strDest所指的內(nèi)存空間的指是否等于0。
3.對(duì)于指針strDest,strSrc,他們的值分別加1,即指向下一個(gè)元素。
即:該表達(dá)式實(shí)現(xiàn)了以下三個(gè)功能:
1.對(duì)于指針strDest, strSrc,將strSrc所指的內(nèi)存空間的值賦給由strDest所指的內(nèi)存空間。
2.判斷賦值后的strDest所指的內(nèi)存空間的值是否等于0。
3.對(duì)于指針strDest,strSrc,他們的值分別加1,即指向下一個(gè)元素。C語(yǔ)言運(yùn)算符表
運(yùn)算符按照優(yōu)先級(jí)大小由上向下排列,在同一行的運(yùn)算符具有相同優(yōu)先級(jí)。第二行是所有的一元運(yùn)算符。
|
|
|
|
| () [] -> . | 括號(hào)(函數(shù)等),數(shù)組,兩種結(jié)構(gòu)成員訪問(wèn) |
|
| ! ~ ++ -- + -
* & (類(lèi)型) sizeof |
否定,按位否定,增量,減量,正負(fù)號(hào),
間接,取地址,類(lèi)型轉(zhuǎn)換,求大小 |
|
| * / % | 乘,除,取模 |
|
| + - | 加,減 |
|
| << >> | 左移,右移 |
|
| < <= >= > | 小于,小于等于,大于等于,大于 |
|
| == != | 等于,不等于 |
|
| & | 按位與 |
|
| ^ | 按位異或 |
|
| | | 按位或 |
|
| && | 邏輯與 |
|
| || | 邏輯或 |
|
| ? : | 條件 |
|
| = += -= *= /=
&= ^= |= <<= >>= |
各種賦值 |
|
| , | 逗號(hào)(順序) |
|
相關(guān)文章
C++自定義封裝socket操作業(yè)務(wù)類(lèi)完整實(shí)例
這篇文章主要介紹了C++自定義封裝socket操作業(yè)務(wù)類(lèi),結(jié)合完整實(shí)例形式分析了Linux環(huán)境下C++操作socket的封裝業(yè)務(wù)類(lèi),可實(shí)現(xiàn)基本的socket連接、參數(shù)設(shè)置、發(fā)送請(qǐng)求等基本功能,需要的朋友可以參考下2017-08-08
C++小利器之std::bind參數(shù)綁定包裝器的使用詳解
從 C++11 開(kāi)始,標(biāo)準(zhǔn)庫(kù)提供了 std::bind 用于綁定函數(shù) f 和調(diào)用參數(shù),返回一個(gè)新可調(diào)用函數(shù)對(duì)象 fn,下面就跟隨小編一起深入了解一下std::bind的具體使用吧2023-12-12
C語(yǔ)言編程數(shù)據(jù)結(jié)構(gòu)棧與隊(duì)列的全面講解示例教程
本文介紹著重介紹數(shù)據(jù)結(jié)構(gòu)-棧和隊(duì)列的知識(shí),由于本文也設(shè)計(jì)多個(gè)動(dòng)態(tài)內(nèi)存開(kāi)辟函數(shù),小伙伴們?cè)趯W(xué)習(xí)本文之前,一定一定一定要把動(dòng)態(tài)內(nèi)存開(kāi)辟相關(guān)知識(shí)掌握牢固,這樣學(xué)習(xí)起本文才能事半功倍2021-10-10
C++中std::invalid_argument報(bào)錯(cuò)解決
在C++編程中,std::invalid_argument是一個(gè)常見(jiàn)的異常,用于指示函數(shù)參數(shù)無(wú)效,文章詳細(xì)解析了這一異常的產(chǎn)生原因,并提供了多種解決策略,感興趣的可以了解一下2024-09-09
C語(yǔ)言中的內(nèi)存管理之掌握動(dòng)態(tài)分配的技巧(最新推薦)
在C語(yǔ)言編程中,內(nèi)存管理是一項(xiàng)至關(guān)重要的技能,它直接關(guān)系到程序的性能和穩(wěn)定性,特別是在處理大型數(shù)據(jù)集或需要靈活內(nèi)存布局的場(chǎng)景下,本文將深入探討C語(yǔ)言中的動(dòng)態(tài)內(nèi)存分配技巧,幫助開(kāi)發(fā)者更好地掌握這一核心技能2025-03-03
C語(yǔ)言示例講解while循環(huán)語(yǔ)句的用法
在不少實(shí)際問(wèn)題中有許多具有規(guī)律性的重復(fù)操作,因此在程序中就需要重復(fù)執(zhí)行某些語(yǔ)句。一組被重復(fù)執(zhí)行的語(yǔ)句稱(chēng)之為循環(huán)體,C語(yǔ)言while語(yǔ)句可以是單個(gè)語(yǔ)句,也可以是一個(gè)語(yǔ)句塊,其條件可以是任意表達(dá)式,true是任意非零值,當(dāng)條件為真時(shí),循環(huán)進(jìn)行迭代2022-06-06

