在C中添加不同类型的变量
浮动+(短)长= 我添加了这些类型,根据我的计算,我得到了一个浮点数作为答案,但正确的答案是双重的。 有谁能给我举个例子,说明它是如何变成双重或解释的 试着做:在C中添加不同类型的变量,c,floating-point,long-integer,short,C,Floating Point,Long Integer,Short,浮动+(短)长= 我添加了这些类型,根据我的计算,我得到了一个浮点数作为答案,但正确的答案是双重的。 有谁能给我举个例子,说明它是如何变成双重或解释的 试着做: float F; short L; double res = (double)(F + L); 在C中接受两个算术操作数的运算符始终要求两个操作数的类型相同。如果没有,则根据通常的算术转换对其中一个或两个进行转换,该转换在本标准第6.3.1.8节中有详细说明(链接至2011年标准草案) 简而言之: 如果任一操作数的类型为长双精度,则
float F;
short L;
double res = (double)(F + L);
在C中接受两个算术操作数的运算符始终要求两个操作数的类型相同。如果没有,则根据通常的算术转换对其中一个或两个进行转换,该转换在本标准第6.3.1.8节中有详细说明(链接至2011年标准草案) 简而言之:
- 如果任一操作数的类型为
,则另一个操作数将转换为长双精度
长双精度
- 否则,如果其中一个操作数的类型为
,则另一个操作数将转换为“double”double
- 否则,如果任一操作数的类型为
,则另一个操作数将转换为float
float
double
结果,则需要将一个或两个操作数转换为double
。如果只转换其中一个,则会导致另一个也被转换。(您可能希望将两者转换为显式。)
例如,如果您有:
float f;
long n;
double x = f + n;
然后,加法的结果是float
,只有在执行加法后,才会将其转换为double
。要执行双倍乘法,请将最后一行更改为:
double x = (double)f + (double)n;
另一方面,如果您想要一个
double
结果,很可能您的float
操作数首先应该声明为double
double
在某种意义上是C中的“默认”浮点类型(例如,它是像1.0
这样的不固定文本的类型)float
主要用于节省内存空间非常重要的情况,例如当您有非常大的阵列时。在许多系统上,float
算法甚至不比double
算法快(尽管我对最后一点不是100%确定)。将float
添加到整数类型时,结果是float
。如果你想要double
,你必须从double
开始。你说的(短)长是什么意思?你说的“正确答案是双重的”是什么意思?它还有什么更“正确”的地方吗?不,加法仍然是在类型float
中进行的,并且只有在加法完成后才转换为double
。该cast不做任何操作,因为它无论如何都会转换为double
。若要执行double
加法,需要转换一个或两个操作数。看见