将某种类型变量的值赋给另一种类型的变量时,必须进行类型转换。类型转换有两种:
隐式转换、显式转换。顾名思义,隐式转换会自动进行不会出现错误,而显式转换则
需要强制转换。
必须执行显示转换的情况:
原来的类型 目标类型
sbyte --> byte,ushort,uint,ulong,char
byte --> sbyte,char
short --> sbyte,byte,ushort,uint,ulong,char
ushort --> sbyte,byte,short,char
int --> sbyte,byte,short,ushort,uint,ulong,char
uint --> sbyte,byte,short,ushort,int,char
long --> sbyte,byte,short,ushort,int,char,uint,ulong
ulong --> sbyte,byte,short,ushort,int,char,uint,long
char --> sbyte,byte,short
float --> sbyte,byte,short,ushort,int,char,uint,long,ulong,decimal
double --> sbyte,byte,short,ushort,int,char,uint,long,ulong,float,decimal
decimal --> sbyte,byte,short,ushort,int,char,uint,long,ulong,float,double
总的来说,就是数据类型范围大的转换为范围小的要强制装换,因为小类型的不够包容,斤斤计较,所以要特殊处理,如
uint num1 = 10;
int num2 = (int)num1;
而数据类型范围小的转换为范围大的只是隐式转换,因为大类型能够包容小类型的如:
long num3 = 10;
ulong num4 = num3;
总的从小到大顺序为:int->uint->long->ulong->float->double
->decimal
在你提供的例子中所以要选:c
追问嘿,从你的讲解看必须执行显示转换的情况:float --> sbyte,byte,short,ushort,int,char,uint,long,ulong,decimal
说明float不能自动转换成decimal
。。。咋还选C?//
追答额,因为float不能自动转换为decimal,所以才说它不能自动提升为decimal啊,我觉得没有矛盾,你能问清楚些么