顯式數值轉換是指當不存在相應的隱式轉換時,從一種數字型別到另一種數字型別的轉換。包括:
●從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的轉換,小數的值通過捨入取最接近的值。這種轉換可能會丟失精度,但不會引起異常。
程式清單6-6:
using system;
class test
=",longvalue,intvalue);
}}
這個例子把乙個int型別轉換成為long型別,輸出結果是:
(int)9223372036854775807=-1
這是因為發生了溢位,從而在顯式型別轉換時導致了資訊丟失。
C 顯式轉換
標準c 包含乙個顯式的轉換語法 static cast 用於 良性 和 適度良性 的轉換,包括不用強制轉換 const cast 用於 const 和 或 volatile 進行轉換 reinterpret cast 轉換為完全不同的意思。為了安全的使用它,關鍵必須轉換回原來的型別。轉換成的型別一般...
C 顯式轉換
任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static cast c primer 更為簡單的解釋就是,使用這個型別轉換符,能夠進行比較自然的轉換,類別相近的轉換,而有一些型別差距明顯的轉換則不可以,例如 不能用於不同型別的指標之間轉換 void 除外 不能用於整型與指標之間的...
C 顯式型別轉換
對於型別轉換,我在查資料的時候看到了一種很有意思的解釋,我們可以這樣理解型別轉換 某塊記憶體中的資料是不變的,而型別就是我們戴上的眼鏡,當我們戴上一種眼鏡後,我們就會用對應的型別來解釋記憶體中的資料,這樣不同的解釋就得到了不同的資訊。所謂強制型別轉換實際上就是換上另一副眼鏡後再來看同樣的那塊記憶體資...