關於隱式轉換和顯示轉換,每種語言都有的,c#中當然也不例外。一般常用到的場合,一種是寫運算表示式的時候,要保持整體的資料型別一致和計算準確,比如有乙個變數a是int型,但是它是通過加減乘除得到的,那麼在運算中就要考慮用顯示轉換,除的運算需要轉換成float或double,再把結果強制轉換為int;再乙個就是傳引數的時候,需要注意哪些需要顯示轉換,或者對集合賦值的時候也要注意型別的問題。
1. 隱式型別轉換
所謂隱式轉換,就是系統預設的轉換,其本質是小儲存容量資料型別自動轉換為大儲存容量資料型別。有如下幾種:
從sbyte型別到short,int,long,float,double,或decimal型別。
從byte型別到short,ushort,int,uint,long,ulong,float,double,或decimal型別。
從short型別到int,long,float,double,或decimal型別。
從ushort型別到int,uint,long,ulong,float,double,或decimal型別。
從int型別到long,float,double,或decimal型別。
從uint型別到long,ulong,float,double,或decimal型別。
從long型別到float,double,或decimal型別。
從ulong型別到float,double,或decimal型別。
從char型別到ushort,int,uint,long,ulong,float,double,或decimal型別。
從float型別到double型別。
2.顯式型別轉換
顯式型別轉換,即強制型別轉換。與隱式轉換相反,而且強制轉換會造成資料丟失。
從sbyte到byte,ushort,uint,ulong,或char。
從byte到sbyte或char。
從short到sbyte,byte,ushort,uint,ulong,或char。
從ushort到sbyte,byte,short,或char。
從int到sbyte,byte,short,ushort,uint,ulong,或char。
從uint到sbyte,byte,short,ushort,int,或char。
從long到sbyte,byte,short,ushort,int,uint,ulong,或char。
從ulong到sbyte,byte,short,ushort,int,uint,long,或char。
從char到sbyte,byte,或short。
從float到sbyte,byte,short,ushort,int,uint,long,ulong,char,或decimal。
從double到sbyte,byte,short,ushort,int,uint,long,ulong,char,float,或decimal。
從decimal到sbyte,byte,short,ushort,int,uint,long,ulong,char,float,或double。
當轉換有丟失資訊或導致異常丟擲,轉換按照下列規則進行:
對於從一種整型到另一種整型的轉換,編譯器將針對轉換進行溢位檢測,如果沒有發生溢位,轉換成功,否則丟擲乙個overflowexception異常。這種檢測還與編譯器中是否設定了checked選項有關。
對於從float,double,或decimal到整型的轉換,源變數的值通過捨入到最接近的整型值作為轉換的結果。如果這個整型值超出了目標型別的值域,則將丟擲乙個overflowexception異常。
對於從double到float的轉換,double值通過捨入取最接近的float值。如果這個值太小,結果將變成正0或負0;如果這個值太大,將變成正
無窮或負無窮。如果原double值是nan,則轉換結果也是nan。
對於從float或double到decimal的轉換,源值將轉換成小數形式並通過捨入取到小數點後28位(如果有必要的話)。如果源值太小,則結果為0;如果太大以致不能用小數表示,或是無窮和nan,則將丟擲invalidcastexception異常。
對於從decimal到float或double的轉換,小數的值通過捨入取最接近的值。這種轉換可能會丟失精度,但不會引起異常。
C 隱式和顯示型別轉換
c 是在編譯時靜態型別化的,因此變數在宣告後就無法再次宣告,或者無法用於儲存其他型別的值,除非該型別可以轉換為變數的型別。1.隱式型別轉換 隱式轉換,就是系統預設的轉換,其本質是小儲存容量資料型別自動轉換為大儲存容量資料型別,該轉換是一種安全型別的轉換,不會導致資料丟失,因此不需要任何特殊的語法。下...
C 的隱式和顯示型別轉換
關於隱式轉換和顯示轉換,每種語言都有的,c 中當然也不例外。一般常用到的場合,一種是寫運算表示式的時候,要保持整體的資料型別一致和計算準確,比如有乙個變數a是int型,但是它是通過加減乘除得到的,那麼在運算中就要考慮用顯示轉換,除的運算需要轉換成float或double,再把結果強制轉換為int 再...
C 的隱式和顯示型別轉換
關於隱式轉換和顯示轉換,每種語言都有的,c 中當然也不例外。一般常用到的場合,一種是寫運算表示式的時候,要保持整體的資料型別一致和計算準確,比如有乙個變數a是int型,但是它是通過加減乘除得到的,那麼在運算中就要考慮用顯示轉換,除的運算需要轉換成float或double,再把結果強制轉換為int 再...