在C中添加不同类型的变量

时间:2014-03-14 00:28:10

标签: c floating-point long-integer short

float +(短)long =?

我正在添加这些类型,根据我的计算,我得到一个浮动作为答案,但正确的答案是双倍的。 谁能给我一个如何变成双重或解释的例子..

2 个答案:

答案 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操作数很可能首先被声明为doubledouble在某种意义上是C中的“默认”浮点类型(例如,它是1.0之类的非语义文字的类型。 float主要用于节省内存空间,例如当你有非常大的数组时。在许多系统上,float算术甚至不比double算术快(尽管我在最后一点上并不是100%肯定)。

答案 1 :(得分:-1)

尝试做:

float F;
short L;
double res = (double)(F + L);