什么决定将用于存储临时值的数据类型?

时间:2012-04-19 03:54:56

标签: c math

这可能是非常基本但我很好奇是什么原因。

当处理不同类型的操作(例如乘法和除法)时,不同类型(int,float等)的数据决定了哪种数据类型被选中?

例如,如果我执行以下操作:

float a = 5 / 10;

我将得到“0”,因为5和10暂时存储在我们进行除法的int中,然后我们把它放在浮点数中。对?

但如果我们改为:

float a = (float)5 / 10;

我们得到0.5。

在这种情况下,在C中,当浮点数优先于int时,决策是如何看待的?

3 个答案:

答案 0 :(得分:2)

不同的语言处理方式不同;关于 type conversion 的具体规则是语言规范的一部分。

ANSI规则中描述了C的规则,在这里更方便: http://www.eskimo.com/~scs/cclass/int/sx4cb.html

答案 1 :(得分:2)

看一下这个片段。

float a = 5 / 10;
默认情况下,

510表示为C(以及Java和C ++和Python 2.x)的整数。它们未被指定以任何其他方式存储;也就是说,它们与浮点类型的外观不匹配。整数除法会导致截断,因此每次都会得到值0。

现在,关于第二个片段:

float a = (float)5 / 10;

... C(或Java或C ++或Python 2.x)将其解释为:

float a = 5.0 / 10;

因为浮点值的排名高于整数,所以它会将整数提升为浮点数。这称为类型促销。你可以读一下它here

答案 2 :(得分:1)

编译器通常不会试图“理解你的意思”,因为它们不可能每次都能正确使用它。

他们按照严格的规则执行你告诉他们的事情。

这里,规则是:将整数除以另一个整数返回一个整数。因此,如果你想要浮点除法,只需要划分浮点数。