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