隱式數值轉換包括以下幾種:
●從sbyte類型到short,int,long,float,double,或decimal類型。
●從byte類型到short,ushort,int,uint,long,ulong,float,double,或decimal類型。
●從short類型到int,long,float,double,或decimal類型。
●從ushort類型到int,uint,long,ulong,float,double,或decimal類型。
●從int類型到long,float,double,或decimal類型。
●從uint類型到long,ulong,float,double,或decimal類型。
●從long類型到float,double,或decimal類型。
●從ulong類型到float,double,或decimal類型。
●從char類型到ushort,int,uint,long,ulong,float,double,或decimal類型。
●從float類型到double類型。
其中,從int,uint,或long到float以及從long到double的轉換可能會導致精度下降,但決不會引起數量上的丟失。其它的隱式數值轉換則不會有任何信息丟失。
結合我們在數據類型中學習到的值類型的范圍,我們可以發現,隱式數值轉換實際上就是從低精度的數值類型到高精度的數值類型的轉換。
從上面的10條我們可以看出,不存在到char類型的隱式轉換,這意味著其它整型值不能自動轉換為char類型。這一點我們需要特別注意。
下面的程序給出了隱式數值轉換的例子。
程序清單6-1:
using System; class Test { public static void Main() { byte x=16; Console.WriteLine("x={0}",x); ushort y=x; Console.WriteLine("y={0}",y); y=65535; Console.WriteLine("y={0}",y); float z=y; Console.WriteLine("z={0}",z); } }
程序的輸出將是:
x=16;
y=16;
y=65535;
z=65535;
如果我們在上面程序中的語句之後再加上一句:
y=y+1;
再重新編譯程序時,編譯器將會給出一條錯誤信息:
can not implictly convert type 'int' to type 'ushort'
這說明,從整數類型65536到無符號短整型y不存在隱式轉換。