隐式向上转换是否发生在Visual C#中?

时间:2012-01-03 09:17:14

标签: c#

double b = 1.5 * a,其中afloat变量。

在Visual Studio 2010上的Visual C#中执行乘法之前,a是否会被转换为double

2 个答案:

答案 0 :(得分:8)

如果这是你的意思,浮动将在乘法之前转换为double

float a = 1.2F;
double b = 1.5*a;

给出:

L_0000: nop <========== just because I'm in debug mode
L_0001: ldc.r4 1.2 <=== load the float value 1.2
L_0006: stloc.0 <====== store in "a"
L_0007: ldc.r8 1.5 <=== load the double value 1.5
L_0010: ldloc.0 <====== load "a"
L_0011: conv.r8 <====== widen the value we obtained from "a" to become a double
L_0012: mul <========== multiply as double
L_0013: stloc.1 <====== store in "b"
L_0014: ret <========== all done

请注意,这只会更改堆栈中a的值的副本; a本身不受影响。

答案 1 :(得分:0)

根据规则,'a'的类型没有变化,在这种情况下它将保持浮动。 表达式的结果将被隐式计算为double,但是在考虑之前,“a”的值将会加倍。

在下面的情况下,它将在评估之前投射到Double。

double b = 1.5 * (double)a ;