以前,你知道乙個變數的值儲存為二進位制位的序列,和變數的資料型別告訴編譯器如何翻譯成有意義的值的位。經常的情況是,需要將資料從一種型別轉換為另一種型別。這就是所謂的型別轉換。
隱式型別轉換是自動完成的編譯器每當從不同型別資料的混合。當從一種型別的值分配給另乙個型別,編譯器會隱式地轉換為價值為價值的新型別。例如:
double dvalue = 3; // implicit conversion to double value 3.0
int nvalue = 3.14156; // implicit conversion to integer value 3
在例子中,3的值被提公升到乙個雙值然後分配值。
編譯器將不會抱怨這樣做。
然而,某些型別的轉換本質上是不安全的,如果編譯器可以檢測到乙個不安全的轉換被隱式地請求,它會發出警告。
在第二個例子中,的雙值小數部分被下降是因為不支援小數的整數。
由於轉換成乙個雙int通常會導致資料丟失(這是不安全的),編譯器如visual studio express 2005通常會發出警告。
其他不安全的
轉換涉及分配
無符號變數
符號變數
(反之亦然),
和分配大的
整數(例如:乙個
4位元組長)
的乙個較小的尺寸
的整數變數
(如2位元組短)。
例如,在表達2 + 3.14159,+操作符需要運算元具有相同的資料型別。在這種情況下,左運算元是乙個整數,與右運算元是乙個雙。由於雙中較高的層次,int被轉換為雙。因此,該表示式被評估為2±3.14159,其值為5.14159。
乙個好的問題是,「為什麼是整數樹的底部?對於char和短?「。char和短總是含蓄地晉公升為整數(或無符號整數)在評價。這就是所謂的擴大。
這個層次可以導致了一些有趣的問題。例如,您可能希望表達對5u - 10 - 5(5u意味著5為無符號整數)。但在這種情況下,符號整數(10)提高到乙個無符號整數,和這個表示式的結果是無符號整數4294967291!
許多混合轉換按預期工作。例如,int值= 10×2.7的結果27。10是提公升到乙個浮動,10×2.7的值為27,和27被截斷為整數(即編譯器會抱怨)。
許多新的程式設計師嘗試這樣的事情:浮fvalue = 10 / 4;。然而,因為10和4都是整數,不提倡發生。整數除法是10 / 4的表現,導致2的價值,然後被隱式地轉換為2分fvalue!
在你使用的文字值的情況下(如10,或4),更換乙個或兩個整數的值與乙個浮點字面量的值(10或4)將導致兩個運算元被轉換為浮點值,和師將完成使用浮點運算。
所謂的動態型別,扯談的浮雲而已
所謂的動態型別,就是通過動態語言執行庫,在動態執行期間,動態的確定物件的型別。這個東西哦,微軟目的就是為了方便開發,在實戰中有多大意義?不在本人研究範圍之內。本人以前是學過vb的,vb定義變數的形式好像就是 var a abc var b 100 然後就因為這個受到了很多人的批評,為什麼了?因為沒有...
型別轉換 容器型別之間的轉換
強轉成字串,無非就是在原有的資料的基礎上兩邊套上引號 如果是字串,會把每乙個字元單獨的作為乙個元素放到列表中 如果是字典,只保留鍵,形成一套新的列表 如果是其他的容器,只是單純的在原有資料的基礎上換上 如果是字串,會把每乙個字元單獨的作為乙個元素放到元組中 如果是字典,只保留鍵,形成一套新的元組 如...
mysql型別轉換c 型別轉換 C 型別轉換
一 簡介 型別轉換 把資料從一種型別轉換另一種型別 我們要求等號兩邊參與運算子必須型別一致,如果不一致,滿足下列條件會發生自動型別轉換或者隱式型別轉換。1.兩種型別相容 例如 int和double 相容 都是數字型別 2.目標型別大於源型別 double int 顯示型別轉換 1.兩種型別相相容 i...