c#~~~~当表达式中混合了几种不同的数据类型时,C#会基于运算的顺序将它们自动转换成同一类型,规定是啥呢

比如下面啥类型和decimal类型混合在一个表达式中,不能自动提升为decimal。
A.float B.int C.uint D.byte

将某种类型变量的值赋给另一种类型的变量时,必须进行类型转换。类型转换有两种:
隐式转换、显式转换。顾名思义,隐式转换会自动进行不会出现错误,而显式转换则
需要强制转换。
必须执行显示转换的情况:

原来的类型 目标类型
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啊,我觉得没有矛盾,你能问清楚些么

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-18
byte,short,int,long,float,double根据这个顺序,各种类型的值依次可以向后自动转换
doube等级最高,系统转换的规则是高级的和低级的在一起运算的话,都把低级的数据类型向高级转换,反之就会出错
第2个回答  2011-03-18
c追问

为啥呢,

追答

应是a b,c,d都是整数类型的