.自左向右!~++---(type)*&sizeof自右向左*/%自左向右+-自左向右<<>>自左向右<<=>>=自左向右==!=自左向右&自左向右^自左向右|自左向右">
c語言運算符優(yōu)先級表

c語言運算符優(yōu)先級表

ID:14169492

大?。?3.50 KB

頁數(shù):3頁

時間:2018-07-26

c語言運算符優(yōu)先級表_第1頁
c語言運算符優(yōu)先級表_第2頁
c語言運算符優(yōu)先級表_第3頁
資源描述:

《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,求賦值表達

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。