double b = 1.5 * a
,其中a
是float
变量。
在Visual Studio 2010上的Visual C#中执行乘法之前,a
是否会被转换为double
答案 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 ;