- 算法競賽寶典(第一部):語言及算法入門
- 張新華
- 1551字
- 2021-03-19 19:27:44
運算規則
整型和實型數據可以混合運算,并且由于字符型數據可以與整型通用,因此,整型、實型、字符型數據間可以混合運算。例如,134+'a'+3.4-45.8*'c'是合法的。
但在運算時,系統會自動將不同類型的數據轉換成同一類型的數據,然后再進行運算。轉換的規則由小到大如圖1.24所示:

圖1.24
計算機運算次序為由左到右,如10+'a'+int*float-double/long:
(1)進行10+char的運算,先將char轉換成整數,得結果為107;
(2)由于*比+優先,先進行int*float的運算。將兩數都轉為double型;
(3)107與int*float的積相加,先將整數轉為雙精度數。結果為double型;
(4)將變量long轉化為double型,double/long的結果為double型;
(5)將10+'a'+int*float的結果與double/long的商相減,結果為double型。
C++語言還規定了運算符的優先級和結合性,在表達式求值時,先按運算符的優先級別高低次序執行,例如先乘除后加減。如果一個運算對象兩側的運算符的優先級別相同,如a-b+c,則按規定的“結合方向”處理。
算術運算符的結合方向為“先左后右”,“先左后右”又稱“左結合性”。以后還可以看到有些運算符的結合方向為“自右向左”,即右結合性(例如,賦值運算符)。
C++語言的優先級和結合性是一個很重要的概念,特別是關于“結合性”的概念在其他一些高級語言中是沒有的。
C++的運算符及其優先級請參見附錄。
可以利用強制類型轉換運算符將一個表達式轉換成所需的類型。例如:
(double)a (將a轉換成double型) (int)(x+y) (將x+y的值轉為int型) (float)(4%3) (將4%3的值轉換成float型)
請看一個強制類型轉換的例子:
1 //強制類型轉換 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 float x=3.84; 8 int i; 9 i=(int)x; //將float類型強制轉成int類型 10 cout<<i<<endl; 11 system("pause"); 12 return 0; 13 }
運行結果如下:
x=3.84 i=3
由此可見,通過強制轉換,原float型的整數部分不變,而小數部分被“丟棄”。
C++有兩種轉換,一種是系統自動進行的類型轉換,如3+3.4。另一種是強制類型轉換。當自動類型轉換不能實現目的時,可以用強制類型轉換。如“%”運算符要求其兩側均為整型量,若x為float型,則“x%3”不合法,必須用“(int)x%3”。由于強制類型轉換運算優先級高于%運算,因此先進行強制轉換再對3求模。
類似于(int)(x+y)這樣的表達式必須用括號括起來,如果寫成(int)x+y,則只將x轉換為整型,然后與y相加。
在后面學到函數調用時,有時為了使實參與形參類型一致,可以用強制類型轉換運算符得到一個所需類型的參數。
C++的自增自減運算符++和--的作用是使變量的值增1或減1,如:
++i,--i(在使用i之前,先使i的值加(減)1)
i++,i--(在使用i之后,使i的值加(減)1)
++和--只能用于變量,而不能用于常量或表達式,如5++或(a+b)++都是不合法的。
++和--的結合方向是“自右至左”。
粗略地看,++i和i++的作用相當于i=i+1,但它們的不同之處在于++i是先執行i=i+1后,再使用i的值;而i++是先使用i的值后,再執行i=i+1。如果i的原值等于3,則執行下面的賦值語句:
(1)j=++i;(i的值先變成4,再賦給j,j的值為4)
(2)j=i++;(先將i的值3賦給j,j的值為3,然后i變為4)
例如:
i=3; cout<<++i; 輸出“4”。若改為cout<<i++; 則輸出“3”。
又如:
i=1; i=(++i)+(++i); cout<<i; 該結果為6,因為最后i的值為3,3+3=6。
另外,一般情況下++i的運行速度要略快于i++,這涉及到編譯原理。
賦值符號“=”就是賦值運算符,它的作用是將一個數據賦給一個變量。
在賦值符“=”之前加上其他運算符,稱為復合運算符,例如“+=”。其含義如下面各例:
a+=3 等價于a=a+3
x*=y+8 等價于x=x*(y+8)
x%=3 等價于x=x%3
C++語言采用這種復合運算符,一是為了程序的精練;二是為了提高編譯效率(此處涉及編譯原理的知識,暫不必深究)。
注意:如果是包含若干項的表達式,則相當于它有括號,如:
x%=y+4相當于x%=(y+4),即x=x%(y+4)
而不是x=x%y+4
C++語言提供一種特殊的運算符——逗號運算符,用它將兩個表達式連接起來,如:
3+5,6+8
稱為逗號表達式,又稱為“順序求值運算符”。逗號表達式的求解過程是:先求解表達式1,再求解表達式2。整個逗號表達式的值是表達式2的值。
我想起我們前面定義變量時已經使用過逗號表達式了,如:
int a,b=0,c,d=34; double x,y,z;
- Windows系統管理與服務配置
- Mastering Selenium WebDriver
- 樂學Web編程:網站制作不神秘
- Clojure for Domain:specific Languages
- 數據結構簡明教程(第2版)微課版
- Python忍者秘籍
- Microsoft Dynamics AX 2012 R3 Financial Management
- Python語言實用教程
- Visual C#.NET Web應用程序設計
- Bootstrap for Rails
- Java程序設計基礎(第6版)
- Mastering Leap Motion
- Mastering Unreal Engine 4.X
- HTML5 WebSocket權威指南
- Web開發新體驗