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