[C#] 算數運算:隱含轉換與明確轉換
撰寫程式時,可能都會遇到資料型別的轉換,例如整數和小數點之間做運算,最終要看的是運算過程的資料型別是什麼,當然正常是要2個數是一樣(int和int運算)的型別才能運算,才不會造成結果與預期不符,但是也有例外的情況發生,這就是為什麼會有隱含轉換(Implicit Converson)和明確轉換(Explicit Conversion),兩種方式必需要先弄清楚。
隱含轉換(小轉大)又稱為「自動轉換」,一般來說把原本比較小的資料型別(ex:int)轉成比較大的資料型別(ex:double)才能成立。所以,如果想靠自動轉換把double型別轉成int型別來作運算是不可能,就必需要用到強製轉換(待會說明)。
明確轉換(大轉小)又稱「強制轉換」,反推隱含轉換可得知,像double(64位元)轉換成float(32位元)時,就必需使用強制轉換才行,如果沒有強制轉換,就像是把5公升的水,倒進3公升的水桶,結果當然會溢出來,造成結果錯誤。
int a ;
long b ;
float c ;
double d;
以下轉換哪些符合自動轉換:
c=a ; //a指派給c,符合小轉大。
d=a ; //a指派給d,符合小轉大。
a=d ; //d指派給a,屬大轉小,無法將d隱含轉換成a。
b=d ; //d指派給b,屬大轉小,無法將d隱含轉換成b。
例1:隱含轉換
int i = 2;
double a = 11.0;
double k;
k = a / i;
// 電腦會把裡面的 i 就自動被轉換成double型別才進行運算。
//結果顯示5.5
例2:明確轉換
若是明確轉換(硬要)把double轉成int的話,會如何?
int i = 2;
double a = 11.0;
double k;
k =(int) (a / i);
//結果顯示5
//這時候的運算都已經被轉成int整數型別,然後再把值指派給k。