在C中添加不同类型的变量float +(short)long =?

问题描述:

float +(short)long =?在C中添加不同类型的变量float +(short)long =?

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

+0

将“float”添加到整型时,结果为“float”。如果你想'双',你必须特别从'双'开始。 –

+0

'(short)long'是什么意思?你的意思是“正确的答案是双倍的”?关于它的更“正确”? –

如果运营商需要两个操作数的算术用C总是需要两个操作数是相同类型的。如果它们不是,则根据通常的算术转换转换其中的一个或两个,其在C standard(链接到2011标准的草稿)的6.3.1.8节中有充分描述。

简言之:

  • 如果操作数是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。在很多系统上,算术运算速度甚至不如double算术速度快(尽管在最后一点上我不是100%确定的)。

+0

非常感谢您的理解.. – user2962635

尽量做到:

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

不,这个加法仍然是在'float'类型中完成的,并且只有在添加完成后才转换为'double'。演员什么都不做,因为无论如何它已经被转换为“双”。要做一个'double'加法,你需要转换一个或两个操作数。看[我的回答](http://*.com/a/22394005/827263)。 –