Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中添加不同类型的变量_C_Floating Point_Long Integer_Short - Fatal编程技术网

在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
加法,需要转换一个或两个操作数。看见