在C中添加不同类型的变量float +(short)long =?
float +(short)long =?在C中添加不同类型的变量float +(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%确定的)。
非常感谢您的理解.. – user2962635
尽量做到:
float F;
short L;
double res = (double)(F + L);
不,这个加法仍然是在'float'类型中完成的,并且只有在添加完成后才转换为'double'。演员什么都不做,因为无论如何它已经被转换为“双”。要做一个'double'加法,你需要转换一个或两个操作数。看[我的回答](http://stackoverflow.com/a/22394005/827263)。 –
将“float”添加到整型时,结果为“float”。如果你想'双',你必须特别从'双'开始。 –
'(short)long'是什么意思?你的意思是“正确的答案是双倍的”?关于它的更“正确”? –