1

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

在处理不同类型的操作时,例如不同类型(int、float 等)的数据的乘法和除法,是什么决定了选择哪种数据类型?

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

float a = 5 / 10;

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

但如果我们改为:

float a = (float)5 / 10;

我们得到 0.5。

在这种情况下,在 C 语言中,当 float 优于 int 时,决策的外观如何?

4

3 回答 3

2

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

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

于 2012-04-19T04:15:35.833 回答
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;

因为浮点值的等级高于整数,所以它将整数提升为浮点数。这称为类型提升。你可以在这里阅读一些关于它的信息。

于 2012-04-19T04:25:45.190 回答
1

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

他们只是按照你告诉他们的去做,遵循一套严格的规则。

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

于 2012-04-19T04:16:17.590 回答