在C中添加不同类型的变量
Posted
技术标签:
【中文标题】在C中添加不同类型的变量【英文标题】:adding Variables of different types in C 【发布时间】:2014-03-14 00:28:09 【问题描述】:float + (short)long = ?
我正在添加这些类型,根据我的计算,我得到一个浮点数作为答案,但正确的答案是双倍的。 谁能给我一个例子,说明它是如何变成双重的或解释的..
【问题讨论】:
将float
添加到整数类型时,结果为float
。如果你想要double
,你必须以double
开头。
(short)long
是什么意思? “正确答案是双重的”是什么意思?还有什么更“正确”的?
【参考方案1】:
在 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% 确定最后一点)。
【讨论】:
【参考方案2】:尝试做:
float F;
short L;
double res = (double)(F + L);
【讨论】:
不,添加仍然在类型float
中完成,并且只有在添加完成后才转换为double
。演员什么也不做,因为无论如何它都会被转换为double
。要进行double
加法,您需要转换一个或两个操作数。见my answer。以上是关于在C中添加不同类型的变量的主要内容,如果未能解决你的问题,请参考以下文章