C 算術型別轉換和賦值型別轉換

2021-06-19 03:02:44 字數 1167 閱讀 3137

運算過程中,當參與運算的運算元型別不同時,可進行型別轉換。包括:

自動轉換

和強制轉換

。自動型別轉換指在算術運算以及在賦值過程中,如果運算子兩邊的運算元屬於「型別相容」(指型別不同但系統可以自動進行轉換)的情況,如整數、字元和實數之間,系統會自動進行型別轉換,然後再做運算。包括:算術型別轉換、賦值型別轉換。當運算子兩邊的運算元型別不同但型別相容時,系統自動將不同的資料型別轉換成相同型別,再進行運算。

具體規則如下:

舉例說明:

例如,設有變數

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 向上型別轉換和向下型別轉換

有乙個毛病 遇到乙個問題,總想著以後在遇到再解決,導致乙個簡單的餓問題永遠在拖延,什麼也沒弄會。不知怎麼養成這個壞習慣,誓改之。一 向上型別轉換 所謂向上型別轉換,是指取乙個物件的位址,將其作為基類的位址處理,因為繼承樹是以基類為頂點的。此種轉換無需顯式型別轉換,正是利用這一性質從而實現了多型性。二...