資料類型轉換是我們從國小就開始學習的内容,隻不過在國小我們稱為機關換算。比如一條狗加一匹馬等于是多少呢?總不是兩條狗或兩匹馬吧。我們需要把機關轉為都可以計算的機關,比如動物。結果就是兩隻動物。這樣的轉換,我們稱為資料類型轉換。
在C#中資料類型轉換又分為隐式轉換和顯式轉換。隐式轉換是預設的轉換,而顯式轉換就是必須明确說明的轉換。
比如¥1+$1的問題,在國際貿易結算中,預設将人民币轉換為美元,那計算的結果是¥1+$1=$1.14。但如果在國内貿易結算,就需要明确說明用什麼貨币基準來轉換,如果轉為人民币的話就是¥1+$1=¥8。
這兩個案例都很明确的說明,在數值的計算過程中,需要機關統一,在軟體的開發過程中叫做資料類型一緻。
在C#中對數值類型的資料轉換規定
資料容量小的類型轉換為資料類型大的類型,是隐式轉換,其變量中存儲的資料值不會受到任何影響和變化。
資料容量大的類型轉換為資料類型小的類型,是顯式轉換,如果遠資料中存儲的實際值大于目标類型能存儲的值範圍,則會發生值受損。顯式轉換又叫強制類型轉換。
static void Main(string[] args)
{
int i = int.MaxValue;
long l = i; //隐式轉換 目标類型=源類型值
i = (int)l; //顯式轉換 目标類型=(源類型)源類型值
System.Console.WriteLine(i);
l = long.MaxValue;
i = (int)l;
}
上述代碼首先将int的最大值儲存在int類型的i中,又将i的值指派給了long類型的l。由于long類型能存儲的範圍遠遠大于int,是以存放在long類型中的值不會受損。
又将l存儲的值指派為i,雖然這個時候l中儲存的具體值不超過int的範圍,但long類型比int類型大(你可以想象long的盒子比int的盒子大,大盒子哪怕放了一個小東西,但大盒子所占據的空間還是比小盒子大),是以要求顯式轉換。不過由于具體存的值夠int存儲,是以值沒有受到影響。
最後一次,我們把long類型的最大值指派為l,又把l指派為i,int顯然沒有足夠的空間存儲賦予的值,這個時候i中的值是多少呢?-1。
為什麼是-1?我們來看以下的經典轉換
byte b = 200;
b = (byte)(b + 100);
System.Console.WriteLine(b);
第二行中100是字面量,是以的整數的字面量預設是int類型。byte類型容量小于int類型,應此byte+int的類型轉換是将byte顯式轉換為int,然後兩個int類型之和為int,将相加後的值指派給byte類型的b,就必須要強制類型轉換。
得到的結果是44。byte類型的最大值是255,并且從0開始存儲。(b+100)超過byte最大值45。結果是44就說明當給予的值超過了目前類型能存儲的範圍,則C#預設從0重新開始存放值。
對b指派寫成以下格式,不需要顯示的聲明類型轉換,因為+=是指派運算符。
b += 100;
本文轉自shyleoking 51CTO部落格,原文連結:http://blog.51cto.com/shyleoking/805185