運算過程中,當參與運算的運算元型別不同時,可進行型別轉換。包括:
自動轉換
和強制轉換
。自動型別轉換指在算術運算以及在賦值過程中,如果運算子兩邊的運算元屬於「型別相容」(指型別不同但系統可以自動進行轉換)的情況,如整數、字元和實數之間,系統會自動進行型別轉換,然後再做運算。包括:算術型別轉換、賦值型別轉換。當運算子兩邊的運算元型別不同但型別相容時,系統自動將不同的資料型別轉換成相同型別,再進行運算。
具體規則如下:
舉例說明:
例如,設有變數
char c1, c2;
int i1, i2;
float x1, x2;
則表示式 x2=c1*i1+c1*x1+c1*c2 的求值過程為:
將c1轉換成整型,完成c1*i1,結果為t1;
將c1和x1轉換成雙精度型,完成c1*x1,結果為t2;
將c1和c2均轉換成整型,完成c1*c2,結果為t3;
將t1轉換成雙精度型,完成t1+t2,結果為t4;
將t3轉換成雙精度型,完成t4+t3;
最後結果轉化為單精度型,賦給x2。
當賦值號左值和右值型別不一致但型別相容時,系統將自動進行型別轉換。
轉換規則如下:
絕對值較大的數賦給表達範圍較小的資料時,注意溢位
舉例說明:
例如:設有變數
signed char c1=250;
short int a;a=c1;
【分析】:c1的值為11111010,轉換成11111111 11111010賦給a,正是- 6的補碼。所以,a的值為- 6。如果需要人為地將一種型別轉換為另一種型別,必須使用c++提供的強制型別轉換運算子。一般格式為:
() 《表示式》 或: (《表示式》)
注意:對整個表示式作強制型別轉換。
舉例說明:
設有變數說明:int a=7, b=5; float x; 求表示式 x=a/b 的值。
【分析】:因為a和b都是整數,該除法將執行整除運算,再將整數結果1轉換為單精度型別後進行賦值。所以,結果 x=1
【轉換】:將兩個運算元或其中乙個運算元進行強制型別轉換。可表示為:
x=(float)a/(float)b或x=(float)a/b
表示式將求出這兩個整數相除的實數商1.4,並賦給x。
關於強制型別轉換需要注意的幾點:
算術型別轉換和賦值型別轉換
1 混合運算的型別轉換規則 當二元運算子兩邊的運算元型別不同,但型別相容時,系統將資料型別轉化為一致後進行運算,具體規則如下 1 字元可以作為整數參與數值運算,整數的值為其ascii 值。2 運算元為字元或者短整型時,系統自動將其轉化為整型。3 運算元為單精度型別時,系統自動將其轉換成雙精度型。4 ...
mysql型別轉換c 型別轉換 C 型別轉換
一 簡介 型別轉換 把資料從一種型別轉換另一種型別 我們要求等號兩邊參與運算子必須型別一致,如果不一致,滿足下列條件會發生自動型別轉換或者隱式型別轉換。1.兩種型別相容 例如 int和double 相容 都是數字型別 2.目標型別大於源型別 double int 顯示型別轉換 1.兩種型別相相容 i...
C 向上型別轉換和向下型別轉換
有乙個毛病 遇到乙個問題,總想著以後在遇到再解決,導致乙個簡單的餓問題永遠在拖延,什麼也沒弄會。不知怎麼養成這個壞習慣,誓改之。一 向上型別轉換 所謂向上型別轉換,是指取乙個物件的位址,將其作為基類的位址處理,因為繼承樹是以基類為頂點的。此種轉換無需顯式型別轉換,正是利用這一性質從而實現了多型性。二...