- C++語言程序設計
- 千鋒教育高教產品研發部編著
- 1800字
- 2019-07-30 17:37:44
2.3 表達式與類型轉換
2.3.1 表達式
表達式是由操作數和運算符按一定的語法形式組成的符號序列。每個表達式經過運算后,都會有一個確定的值,并且這個值一定屬于某一特定類型。表達式的求值順序取決于表達式中各種運算符的優先級與結合性。C++常用運算符的功能、優先級和結合性如表2.4所示。
表2.4 C++中常用運算符的功能、優先級和結合性

1. 算術表達式
算術表達式是指由算術運算符和位操作運算符組成的表達式。接下來演示算術表達式求值,如例2-2所示。
例2-2

運行結果如圖2.8所示。
在例2-2中,程序有3個算術運算表達式,在計算時,需要注意以下幾點:
- 整數型相除,商值為整型。本例中4/7值為0,14/5值為2。
- 字符常量在算術表達式中會自動轉換為int型,即使用它的ASCII碼值。本例中第5行字符'a'的取值為97。

圖2.8 例2-2運行結果
- 在賦值表達式a=c+++--d中,系統自動將表達式拆解為a=c+++--d。計算時,先計算c++,表達式值為6,c為7,再計算--d,表達式值為3,d為3,再將c++與--d兩個表達式值相加賦值給a,因此a的值為9。
2. 關系表達式
關系表達式是由關系運算符組成的表達式。接下來演示關系表達式求值,如例2-3所示。
例2-3

運行結果如圖2.9所示。

圖2.9 例2-3運行結果
在例2-3中,程序有4個關系表達式,關系運算實際上是比較兩個操作數是否符合給定的條件。若符合條件,則關系表達式的值為真,否則為假。在C++編譯系統中,通常將真表示為true或1,將假表示為false或0。非0數被認為是真,0被認為是假。如本例中第6行,因為字符'a'的ASCII碼值大于字符'A'的ASCII碼值,所以表達式'a'<'A'的值為0。
3. 邏輯表達式
邏輯表達式是將多個關系表達式或邏輯量(真或假)組成的一個表達式,它的運算結果也為真或假。邏輯表達式求值有特殊規定:在邏輯表達式中,各操作數從左至右依次計算,只要出現了某個操作數的值可以確定整個邏輯表達式的值時,后面余下的操作數將不會再計算。接下來演示邏輯表達式求值,如例2-4所示。
例2-4

運行結果如圖2.10所示。

圖2.10 例2-4運行結果
在例2-4中,程序有兩個邏輯表達式:第一個邏輯表達式!a&&b++||++c,!a為假,則得出!a&&b++為假,此時不會執行b++,b的值為6,再執行++c,此時c為7,整個邏輯表達式!a&&b++||++c的值為真;第二個邏輯表達式a||--b&&c++,根據優先級,此表達式等價于a||(--b&&c++),因為a的值為真,所以不需要再計算--b&&c++,--b與c++也不會執行,整個邏輯表達式a||--b&&c++的值為真。
4. 條件表達式
條件表達式是指使用三目運算符組成的表達式,因為它具有簡單的條件語句的功能。接下來演示條件表達式求值,如例2-5所示。
例2-5

運行結果如圖2.11所示。

圖2.11 例2-5運行結果
在例2-5中,使用了三目運算符的嵌套,注意該運算符的結合性是從右至左的。程序中條件表達式實現的功能是:如果a大于b,則c為2?a;如果a小于b,則c為a+b;如果a等于b,則c為0。
5. 逗號表達式
逗號表達式是指由逗號運算符將若干個表達式連成的表達式。逗號運算符是優先級最低的運算符,它可以使多個表達式放在一行上,從而大大簡化了程序。接下來演示逗號表達式的使用,如例2-6所示。
例2-6

運行結果如圖2.12所示。

圖2.12 例2-6運行結果
在例2-6中,(a=2,b=a+3,b+4)為逗號表達式,C++將從左至右逐個計算每個表達式,最終整個表達式的結果就是最后計算的那個表達式的類型和值,因此c的值為9。
2.3.2 自動類型轉換
自動類型轉換是由編譯器編譯時自動完成轉換的。在C++中,自動類型轉換的規則如下:
- 算術運算中的自動轉換是以較高類型為準進行轉換的。較高類型指存儲空間較大者的類型,C++中的基本數據類型級別如圖2.13所示。

圖2.13 C++中基本數據類型的類型級別
- 賦值運算符的自動轉換以賦值號左側的變量類型為準進行轉換。
- 在函數中,實參類型以形參類型為準進行轉換,函數返回值類型以函數聲明中的返回值類型為準進行轉換。
2.3.3 強制類型轉換
在任何表達式中,編程者都可以將某個量強制轉換成所需要的類型。強制類型轉換的語法格式如下:
(類型名)表達式 類型名(表達式)
第一種格式來自C語言,第二種格式是純粹的C++。C++格式的強制類型轉換就是讓使用者像函數調用一樣,具體示例如下:
cout <<double(6)/4<<endl;
上面語句中,表達式double(6)/4先進行強制類型轉換,將6轉換成double類型,但除法運算符右邊的4為int類型,此時對4進行自動類型轉換,將4轉換成double類型,最后進行除法運算,結果為1.5,它是double類型的。
關于類型轉換還需注意它占用系統時間,并且有時會帶來意想不到的錯誤,因此應謹慎使用。
- Practical UX Design
- iOS 9 Game Development Essentials
- Python Tools for Visual Studio
- Learning Neo4j 3.x(Second Edition)
- WordPress Plugin Development Cookbook(Second Edition)
- Learning Python by Building Games
- C++新經典
- Android移動開發案例教程:基于Android Studio開發環境
- Scratch3.0趣味編程動手玩:比賽訓練營
- Node.js從入門到精通
- Test-Driven iOS Development with Swift
- Learning WordPress REST API
- Apache Kafka 1.0 Cookbook
- Python程序設計現代方法
- 零基礎入門學習C語言:帶你學C帶你飛