这可能是非常基本但我很好奇是什么原因。
当处理不同类型的操作(例如乘法和除法)时,不同类型(int,float等)的数据决定了哪种数据类型被选中?
例如,如果我执行以下操作:
float a = 5 / 10;
我将得到“0”,因为5和10暂时存储在我们进行除法的int中,然后我们把它放在浮点数中。对?
但如果我们改为:
float a = (float)5 / 10;
我们得到0.5。
在这种情况下,在C中,当浮点数优先于int时,决策是如何看待的?
答案 0 :(得分:2)
不同的语言处理方式不同;关于 type conversion 的具体规则是语言规范的一部分。
ANSI规则中描述了C的规则,在这里更方便: http://www.eskimo.com/~scs/cclass/int/sx4cb.html
答案 1 :(得分:2)
看一下这个片段。
float a = 5 / 10;
默认情况下, 5
和10
表示为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)
编译器通常不会试图“理解你的意思”,因为它们不可能每次都能正确使用它。
他们按照严格的规则执行你告诉他们的事情。
这里,规则是:将整数除以另一个整数返回一个整数。因此,如果你想要浮点除法,只需要划分浮点数。