在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 操作数应该首先声明为doubledouble 在某种意义上是 C 中的“默认”浮点类型(例如,它是像 1.0 这样的无后缀文字的类型)。 float 主要用于节省内存空间很重要的情况,例如当您有非常大的数组时。在许多系统上,float 算术甚至不比double 算术快(尽管我不能 100% 确定最后一点)。

【讨论】:

【参考方案2】:

尝试做:

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

【讨论】:

不,添加仍然在类型float中完成,并且只有在添加完成后才转换为double。演员什么也不做,因为无论如何它都会被转换为double。要进行double 加法,您需要转换一个或两个操作数。见my answer。

以上是关于在C中添加不同类型的变量的主要内容,如果未能解决你的问题,请参考以下文章

C语言中能否在一条定义语句中定义多个不同类型变量?举例说明

如何在 C 中取消设置变量以允许稍后使用具有不同数据类型的相同名称?

结构体怎么定义

003C#变量

C语言变量的定义和声明有啥不同?

C 数据类型