c#支援隱式型別轉換,但前提是不損失資料精度。而c和c++不同的是,即使損失精度也會自動轉換。
如:int x; double y; y=2.7; x=y;
假使賦值操作真被執行,那麼y值的小數部分將被擷取,x取得值2。這樣就發生了精度損失,或稱窄化轉換。c或c++編譯器允許這樣的賦值,不出一聲就把值給截短;然而,c#編譯器會提示錯誤:
error cs0029:cannot implicitly convert 'double' to type 'int'
為了明確告訴c#編譯器我們願意接受損失,必須進行顯示轉換,把表示式值型別轉換為括號裡的目標型別。
上例需改為: nt x; double y; y=2.7; x=(int)y;
如果nt x; double y; x=2; y=x;
c#編譯器不會對末行產生問題,c#對較低精度的值-2-賦予了擁有較高精度的變數,稱作寬化轉換。這類轉換c#會自動進行,無需顯示轉換。
注意乙個問題,在c#麵給float變數賦值時,有乙個特殊情況,
float y=3.5; //不會被編譯!c#認為類似3.5這樣帶有小數部分的數字常量是擁有更高精度的double值,因精度損失決絕執行。此時必須顯示把浮點常量轉換為float值。
float y=(float)3.5;
或者使用字尾f,強制編譯器把賦值語句左邊的常量看作浮點值:
float y=3.5f;
C 隱式和顯示型別轉換
c 是在編譯時靜態型別化的,因此變數在宣告後就無法再次宣告,或者無法用於儲存其他型別的值,除非該型別可以轉換為變數的型別。1.隱式型別轉換 隱式轉換,就是系統預設的轉換,其本質是小儲存容量資料型別自動轉換為大儲存容量資料型別,該轉換是一種安全型別的轉換,不會導致資料丟失,因此不需要任何特殊的語法。下...
C 的隱式和顯示型別轉換
關於隱式轉換和顯示轉換,每種語言都有的,c 中當然也不例外。一般常用到的場合,一種是寫運算表示式的時候,要保持整體的資料型別一致和計算準確,比如有乙個變數a是int型,但是它是通過加減乘除得到的,那麼在運算中就要考慮用顯示轉換,除的運算需要轉換成float或double,再把結果強制轉換為int 再...
C 的隱式和顯示型別轉換
關於隱式轉換和顯示轉換,每種語言都有的,c 中當然也不例外。一般常用到的場合,一種是寫運算表示式的時候,要保持整體的資料型別一致和計算準確,比如有乙個變數a是int型,但是它是通過加減乘除得到的,那麼在運算中就要考慮用顯示轉換,除的運算需要轉換成float或double,再把結果強制轉換為int 再...