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

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

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

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

float a = 5 / 10; 

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

但如果我们改为:

 float a = (float)5 / 10; 

我们得到0.5而不是。

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

看看这个片段。

 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; 

因为浮点值的等级高于整数,所以它会将整数提升为浮点数。 这称为类型促销。 你可以在这里阅读一下 。

不同的语言处理不同; 有关类型转换的特定规则是语言规范的一部分。

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

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

他们按照严格的规则做你告诉他们的事。

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