C 中隱式型別轉換和顯示型別轉換

2021-06-16 15:03:18 字數 720 閱讀 6799

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 再...