資源描述:
《c語言運(yùn)算符優(yōu)先級(jí)表》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、C語言運(yùn)算符優(yōu)先級(jí)表(由上至下,優(yōu)先級(jí)依次遞減)運(yùn)算符結(jié)合性()[]->.自左向右!~++---(type)*&sizeof自右向左*/%自左向右+-自左向右<<>>自左向右<<=>>=自左向右==!=自左向右&自左向右^自左向右
2、自左向右&&自左向右
3、
4、自左向右?:自右向左Assignments自右向左,自左向右第一、像()[]->.之類的理所當(dāng)然是最優(yōu)先的,其實(shí)它們壓根也不算什么運(yùn)算符了第二、除了上面的四種運(yùn)算符之外,接下來就是單目運(yùn)算符,也就是!~++---(type)*&sizeof了。記住它們
5、的順序可是自右向左啊!其實(shí)結(jié)合實(shí)例是很容易理解的,比如i++等。第三、跟著就是雙目運(yùn)算符了,也是C語言運(yùn)算符優(yōu)先級(jí)中最容易讓人混淆的地方了。其實(shí)也沒有那么可怕,你認(rèn)真觀察就會(huì)發(fā)現(xiàn)。在雙目運(yùn)算符中,算術(shù)運(yùn)算符優(yōu)先級(jí)最高,然后是移位運(yùn)算符,接著是關(guān)系運(yùn)算符,再著是邏輯運(yùn)算符。不過這邊需要說的是,在關(guān)系運(yùn)算符中,<<=>>=比==!=的優(yōu)先級(jí)來得高。此外,在邏輯運(yùn)算符中,與運(yùn)算又比或運(yùn)算優(yōu)先級(jí)來得高,異或則處于二者之間。同樣的,你可以類比出&&與
6、
7、的優(yōu)先級(jí)關(guān)系.第四、在雙目操作符之后,就是三目操作符了,沒有
8、什么好說的了。第五、然后是賦值操作符,你也許會(huì)把賦值操作符與三目運(yùn)算符的優(yōu)先級(jí)搞混。沒有關(guān)系,我想你一定寫過這樣的語句(如果沒有,請(qǐng)你記住?。簃ax=(a>b)?a:b;,從這個(gè)語句里,你就不難記住賦值運(yùn)算符為什么比三目運(yùn)算符的優(yōu)先級(jí)低了!第六、逗號(hào)運(yùn)算符是分割各個(gè)子語句的(感覺這么說有點(diǎn)不準(zhǔn)確,不過我想大家會(huì)明白我的意思的),自然優(yōu)先級(jí)最低了,我想這個(gè)應(yīng)該不是很容易混淆的??偨Y(jié)一下,按運(yùn)算符優(yōu)先級(jí)從高到低:單目運(yùn)算符->雙目運(yùn)算符->三目運(yùn)算符->賦值運(yùn)算符->逗號(hào)運(yùn)算符特別在雙目運(yùn)算符中,按運(yùn)算符
9、優(yōu)先級(jí)從高到低:算術(shù)運(yùn)算符->移位運(yùn)算符->關(guān)系運(yùn)算符(其中==和!=優(yōu)先級(jí)又較低)->邏輯運(yùn)算符(按位與-〉按位異或-〉按位或-〉邏輯與-〉邏輯或)!?運(yùn)算符的結(jié)合性指同一優(yōu)先級(jí)的運(yùn)算符在表達(dá)式中操作的組織方向,即:當(dāng)一個(gè)運(yùn)算對(duì)象兩側(cè)運(yùn)算符的優(yōu)先級(jí)別相同時(shí),運(yùn)算對(duì)象與運(yùn)算符的結(jié)合順序,C語言規(guī)定了各種運(yùn)算符的結(jié)合方向(結(jié)合性)。大多數(shù)運(yùn)算符結(jié)合方向是“自左至右”,即:先左后右,例如a-b+c,b兩側(cè)有-和+兩種運(yùn)算符的優(yōu)先級(jí)相同,按先左后右結(jié)合方向,b先與減號(hào)結(jié)合,執(zhí)行a-b的運(yùn)算,再執(zhí)行加c的運(yùn)算。
10、除了自左至右的結(jié)合性外,C語言有三類運(yùn)算符參與運(yùn)算的結(jié)合方向是從右至左。即:單目運(yùn)算符,條件運(yùn)算符,以及賦值運(yùn)算符。關(guān)于結(jié)合性的概念在其他高級(jí)語言中是沒有的,這是C語言的特點(diǎn)之一。??++a或a++和--a或a--分別稱為前置加或后置加運(yùn)算和前置減或后置減運(yùn)算,都是單目運(yùn)算符。值得注意的是,前置、后置運(yùn)算只能用于變量,不能用于常量和表達(dá)式,且結(jié)合方向是從右至左。如當(dāng)i=6時(shí),求-i++的值和i的值。由于“-”(負(fù)號(hào))“++”為同一個(gè)優(yōu)先級(jí),故應(yīng)理解為-(i++),又因是后置加,所以先有-i++的值為-6
11、,然后i增值1為7,即i=7。例1main(){inta=3,b=5,c;c=a*b+++b;printf(“c=%d”,c);}要得出c的值,首先要搞清+++的含義。++運(yùn)算符的結(jié)合方向是自右向左的,如果將表達(dá)式理解為:c=a*b+(++b);實(shí)際上C編譯器將表達(dá)式處理為:c=(a*b++)+b,因?yàn)镃編譯器總是從左至右盡可能多地將若干個(gè)字符組成一個(gè)運(yùn)算符,如i+++j等價(jià)于(i++)+j。接下來是解決a*b++的問題,因?yàn)?+運(yùn)算符的運(yùn)算對(duì)象只能是整型變量而不能是表達(dá)式或常數(shù),所以a*b++顯然是a
12、*(b++)而非(a*b)++,因此整個(gè)表達(dá)式就是c=(a*(b++))+b,結(jié)果為c=20。例2main(){inti=1,j;j=i+++i+++i++;printf(“i=%d,j=%d”,i,j);}例3main(){inti=1,m;m=(++i)+(++i)+(++i);printf(“i=%d,m=%d”,i,m);}j和m的值均由表達(dá)式求得,并且這兩個(gè)表達(dá)式均由自增運(yùn)算符、加法運(yùn)算符和賦值運(yùn)算符組成。那么,它們的值到底為多少呢?j=1+1+1=3還是j=1+2+3=6?m=2+3
13、+4=9還是m=4+4+4=12?上機(jī)運(yùn)行結(jié)果為:i=4,j=3,m=10(VC6.0)。分析:運(yùn)算符“++”,“+”和“=”的優(yōu)先級(jí)是遞減的,在計(jì)算時(shí),先進(jìn)行自增運(yùn)算,再進(jìn)行加法運(yùn)算,最后是賦值運(yùn)算。而自增運(yùn)算又根據(jù)“i++”和“++i”的不同定義得到不同的值。i+++i+++i++先將i原值(1)取出,作為表達(dá)式中i的值進(jìn)行加法運(yùn)算得到3,然后再實(shí)現(xiàn)三次自加;(++i)+(++i)+(++i)的計(jì)算與編譯器有關(guān)。例4設(shè)a=6,求賦值表達(dá)