表達式由運算符、常量及變量構成。C語(yǔ)言的表達式基本遵循一般代數規則,有幾點(diǎn)卻是與C語(yǔ)言緊密相關(guān)的,以下將分別加以討論。
2.7.1 表達式中的類(lèi)型轉換
混合于同一表達式中的不同類(lèi)型常量及變量,應均變換為同一類(lèi)型的量。C語(yǔ)言的編譯程序將所有操作數變換為與最大類(lèi)型操作數同類(lèi)型。變換以一次一操作的方式進(jìn)行。具體規則如下:
1)所有char及shortint型量轉為int型,所有float轉換為double。
2)如操作數對中一個(gè)為longdouble,另一個(gè)轉換為longdouble。①要不然,一個(gè)為double,另一個(gè)轉為double。②要不然,一個(gè)為long,另一個(gè)轉為long。③要不然,一個(gè)為unsigned,另一個(gè)轉為unsigned。
一旦運用以上規則。每一對操作數均變?yōu)橥?lèi)型。注意,規則2)有幾種必須依次應用的條件。
圖2-1示出了類(lèi)型轉換。首先,charch轉換成int,且floatf轉換成double;然后ch/i的結果轉換成double,因為f*d是double;最后由于這次兩個(gè)操作數都是double,所以結果也是double.
2.7.2構成符cast
可以通過(guò)稱(chēng)為cast的構成符強迫一表達式變?yōu)樘囟?lèi)型。其一般形式為:
(type)expression(type)是標準C語(yǔ)言中的一個(gè)數據類(lèi)型。例如,為確保表達式x/2的結果具有類(lèi)型float,可寫(xiě)為:
(float)x/2通常認為cast是操作符。作為操作符,cast是一元的,并且同其它一元操作符優(yōu)先級相同。雖然cast在程序中用得不多,但有時(shí)它的使用的確很有價(jià)值。例如,假設希望用一整數控制循環(huán),但在執行計算時(shí)又要有小數部分。
若沒(méi)有cast(float),就僅執行一次整數除;有了cast就可保證在屏幕上顯示答案的小數部分。
2.7.3空格與括號
為了增加可讀性,可以隨意在表達式中插入tab和空格符。例如,下面兩個(gè)表達式是相同的。
x=10/y*(127/x);x=10/y*(127/x);
冗余的括號并不導致錯誤或減慢表達式的執行速度。我們鼓勵使用括號,它可使執行順序更清楚一些。例如,下面兩個(gè)表達式中哪個(gè)更易讀一些呢?
x=y/2-34*temp&127;x=(y/2)-((34*temp)&127);
2.7.4C語(yǔ)言中的簡(jiǎn)寫(xiě)形式
C語(yǔ)言提供了某些賦值語(yǔ)句的簡(jiǎn)寫(xiě)形式。例如語(yǔ)句:
x=x+10;
在C語(yǔ)言中簡(jiǎn)寫(xiě)形式是:
:x+=10;
;
這組操作符對+=通知編譯程序將X+10的值賦予X。這一簡(jiǎn)寫(xiě)形式適于C語(yǔ)言的所有二元操作符(需兩個(gè)操作數的操作符)。在C語(yǔ)言中,
variable=variable1operatorexpression;
與variable1operator=expression相同。請看另一個(gè)例子:
x=x-100;
;
其等價(jià)語(yǔ)句是
x-=100;
簡(jiǎn)寫(xiě)形式廣泛應用于專(zhuān)業(yè)C語(yǔ)言程序中,希望讀者能熟悉它。