3.8.2 算術(shù)運算符和算術(shù)表達(dá)式 算術(shù)表達(dá)式是由算術(shù)運算符和括號連接起來的式子,。
算術(shù)表達(dá)式:用算術(shù)運算符和括號將運算對象(也稱操作數(shù))連接起來的,、符合C 語 法規(guī)則的式子。 以下是算術(shù)表達(dá)式的例子: a+b (a*2)/c (x+r)*8-(a+b)/7 ++I sin(x)+sin(y) (++i)-(j++)+(k--) 運算符的優(yōu)先級:C語言中,,運算符的運算優(yōu)先級共分為15 級,。1 級最高,15 級最低,。 在表達(dá)式中,,優(yōu)先級較高的先于優(yōu)先級較低的進(jìn)行運算。而在一個運算量兩側(cè)的運算符 優(yōu)先級相同時,,則按運算符的結(jié)合性所規(guī)定的結(jié)合方向處理,。 運算符的結(jié)合性:C語言中各運算符的結(jié)合性分為兩種,即左結(jié)合性(自左至右)和右結(jié) 合性(自右至左),。例如算術(shù)運算符的結(jié)合性是自左至右,,即先左后右。如有表達(dá)式x-y+z 則y 應(yīng)先與“-”號結(jié)合,,執(zhí)行x-y 運算,,然后再執(zhí)行+z 的運算。這種自左至右的結(jié)合 方向就稱為“左結(jié)合性”,。而自右至左的結(jié)合方向稱為“右結(jié)合性”,。最典型的右結(jié)合 性運算符是賦值運算符。如x=y=z,由于“=”的右結(jié)合性,,應(yīng)先執(zhí)行y=z 再執(zhí)行x=(y=z) 運算,。C語言運算符中有不少為右結(jié)合性,應(yīng)注意區(qū)別,,以避免理解錯誤,。 3. 強(qiáng)制類型轉(zhuǎn)換運算符 其一般形式為: (類型說明符) (表達(dá)式) 其功能是把表達(dá)式的運算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表示的類型。 例如: (float) a 把a 轉(zhuǎn)換為實型 (int)(x+y) 把x+y 的結(jié)果轉(zhuǎn)換為整型 4. 自增,、自減運算符 自增1,,自減1運算符:自增1 運算符記為“++”,其功能是使變量的值自增1,。 自減 1 運算符記為“--”,,其功能是使變量值自減1。 自增 1,,自減1 運算符均為單目運算,,都具有右結(jié)合性??捎幸韵聨追N形式: ++i i 自增1 后再參與其它運算,。 --i i 自減1 后再參與其它運算,。 i++ i 參與運算后,i 的值再自增1,。 i-- i 參與運算后,,i 的值再自減1。 在理解和使用上容易出錯的是 i++和i--,。特別是當(dāng)它們出在較復(fù)雜的表達(dá)式或語句中 時,,常常難于弄清,因此應(yīng)仔細(xì)分析,。 【例 3.16】 main(){ int i=8; printf("%d\n",++i); printf("%d\n",--i); printf("%d\n",i++); printf("%d\n",i--); printf("%d\n",-i++); 第52 頁 printf("%d\n",-i--); } i 的初值為8,,第2 行i 加1 后輸出故為9;第3 行減1 后輸出故為8,;第4 行輸出i 為 8 之后再加1(為9),;第5 行輸出i 為9 之后再減1(為8) ;第6 行輸出-8 之后再加1(為9),, 第7 行輸出-9 之后再減1(為8),。 【例 3.17】 main(){ int i=5,j=5,p,q; p=(i++)+(i++)+(i++); q=(++j)+(++j)+(++j); printf("%d,%d,%d,%d",p,q,i,j); } 這個程序中,對P=(i++)+(i++)+(i++)應(yīng)理解為三個i 相加,,故P 值為15,。然后i 再自增1 三次相當(dāng)于加3 故i 的最后值為8。而對于q 的值則不然,,q=(++j)+(++j)+(++j)應(yīng)理解為q 先自增1,,再參與運算,由于q 自增1 三次后值為8,,三個8 相加的和為24,,j 的最后值仍 為8。 3.9 賦值運算符和賦值表達(dá)式 1. 賦值運算符 簡單賦值運算符和表達(dá)式:簡單賦值運算符記為“=”,。由“= ”連接的式子稱為賦值表 達(dá)式,。其一般形式為: 變量=表達(dá)式 例如: x=a+b w=sin(a)+sin(b) y=i+++--j 賦值表達(dá)式的功能是計算表達(dá)式的值再賦予左邊的變量。賦值運算符具有右結(jié)合性,。 因此 a=b=c=5 可理解為 a=(b=(c=5)) 在其它高級語言中,,賦值構(gòu)成了一個語句,稱為賦值語句,。而在 C 中,把“=”定義 為運算符,,從而組成賦值表達(dá)式,。凡是表達(dá)式可以出現(xiàn)的地方均可出現(xiàn)賦值表達(dá)式。 例如,,式子: x=(a=5)+(b=8) 是合法的,。它的意義是把5 賦予a,8 賦予b,再把a,b 相加,,和賦予x,,故x 應(yīng)等于13。 在C語言中也可以組成賦值語句,,按照C語言規(guī)定,,任何表達(dá)式在其未尾加上分號就 構(gòu)成為語句。因此如 x=8;a=b=c=5,; 第 53 頁 都是賦值語句,,在前面各例中我們已大量使用過了。
2. 類型轉(zhuǎn)換 如果賦值運算符兩邊的數(shù)據(jù)類型不相同,,系統(tǒng)將自動進(jìn)行類型轉(zhuǎn)換,,即把賦值號右邊 的類型換成左邊的類型。具體規(guī)定如下: 1) 實型賦予整型,,舍去小數(shù)部分,。前面的例子已經(jīng)說明了這種情況。 2) 整型賦予實型,,數(shù)值不變,,但將以浮點形式存放,即增加小數(shù)部分(小數(shù)部分的值 為0),。 3) 字符型賦予整型,,由于字符型為一個字節(jié),而整型為二個字節(jié),,故將字符的ASCII 碼值放到整型量的低八位中,,高八位為0。整型賦予字符型,,只把低八位賦予字符 量,。 【例 3.18】 main(){ int a,b=322; float x,y=8.88; char c1='k',c2; a=y; x=b; a=c1; c2=b; printf("%d,%f,%d,%c",a,x,a,c2); } 本例表明了上述賦值運算中類型轉(zhuǎn)換的規(guī)則。a 為整型,,賦予實型量y 值8.88 后只取整 數(shù)8,。x 為實型,賦予整型量b 值322,, 后增加了小數(shù)部分,。字符型量c1 賦予a 變?yōu)檎停?BR>整型量b 賦予c2 后取其低八位成為字符型(b 的低八位為01000010,即十進(jìn)制66,,按ASCII 碼對應(yīng)于字符B),。 3. 復(fù)合的賦值運算符 在 賦 值 符 “ = ” 之前加上其它二目運算符可構(gòu)成復(fù)合賦值符。如+=,-=,*=, / =,%=,<<=,>>=,&=,^=,|=,。 構(gòu)成復(fù)合賦值表達(dá)式的一般形式為: 變量 雙目運算符=表達(dá)式 它等效于 變量=變量運算符 表達(dá)式 例如: a+=5 等價于a=a+5 x*=y+7 等價于x=x*(y+7) r%=p 等價于r=r%p 復(fù)合賦值符這種寫法,,對初學(xué)者可能不習(xí)慣,,但十分有利于編譯處理,能提高編譯效 率并產(chǎn)生質(zhì)量較高的目標(biāo)代碼,。 |
|