float +(短)long =?
我正在添加这些类型,根据我的计算,我得到一个浮动作为答案,但正确的答案是双倍的。 谁能给我一个如何变成双重或解释的例子..
答案 0 :(得分:2)
在C中采用两个算术操作数的运算符总是要求两个操作数具有相同的类型。如果不是,则根据通常的算术转换转换其中一个或两个,这些在C standard的6.3.1.8节中有详细描述(链接是草稿2011标准)。
简言之:
long double
,则另一个操作数将转换为long double
。double
,则另一个操作数将转换为“double”。float
,则另一个操作数将转换为float
。接下来是两个整数类型操作数的规则集,在这种情况下不适用。
如果您需要double
结果,则需要将一个或两个操作数转换为double
。如果只转换其中一个,它也会导致另一个转换。 (您可能希望将两者都转换为显式。)
例如,如果你有:
float f;
long n;
double x = f + n;
然后添加的结果是float
,只有在执行添加后才会转换为double
。要进行double
乘法,请将最后一行更改为:
double x = (double)f + (double)n;
另一方面,如果您想要double
结果,则您的float
操作数很可能首先被声明为double
。 double
在某种意义上是C中的“默认”浮点类型(例如,它是1.0
之类的非语义文字的类型。 float
主要用于节省内存空间,例如当你有非常大的数组时。在许多系统上,float
算术甚至不比double
算术快(尽管我在最后一点上并不是100%肯定)。
答案 1 :(得分:-1)
尝试做:
float F;
short L;
double res = (double)(F + L);