0

鉴于以下 ANSI C 代码,我想知道结果:

main() {
  int a = 19.4 / 9.7;               // result = 2
  float b = (int) 19.4 / (int) 9.7  // result = 2.000000, why?
  float c = (int) 9.7;              // result = 9
}

我知道 C 会在转换为 int 时去掉所有小数位,但如果我看到第二行,我的逻辑就有缺陷。如果小数位被删除,结果必须是 2.11111。

在 ANSI C 中如何进行浮点转换?

4

5 回答 5

4

在标准 C 中,除非另有说明(例如 19.4F、9.7F),否则假定 19.4 和 9.7 等文字是双精度的。

编译器将使用整数除法函数来计算 x / y(如果 x 和 y 都是 int(兼容)类型),或者如果 x 和 y 中至少一个是浮点数,则编译器将使用浮点除法函数来计算 x / y类型。

float b = (int) 19.4 / (int) 9.7 // 结果 = 2.000000,为什么?

您要求将 19.4 转换为 int,并将 9.7 转换为 int,从而有效地要求编译器计算 19/9 = 2 的整数除法,然后将其提升为 float 以存储在 b 中。2 变为 2.0。

.PMCD。

于 2010-11-16T20:32:52.890 回答
4

在第 2 行中,您将输入值转换为整数,然后进行整数除法(因为除法的两个操作数都是整数,除法是在整数空间中完成的 - 这意味着任何小数结果都将被截断)。

所以,19 / 9 = 2

然后,为了将此整数转换为浮点数,它会将 2 隐式转换回 2.000000

于 2010-11-16T20:35:45.183 回答
1

不,它必须是 2。当你将一个 int 除以一个 int 时,你得到一个 int。因此 2. 您可以在之后将其转换为您喜欢的任何内容,但小数点已经消失了。

于 2010-11-16T20:35:05.463 回答
1

将两个整数相除,你将得到一个整数。除以一个浮点数和一个整数,你将得到一个浮点数。

于 2010-11-16T20:35:23.597 回答
1

(int) 19.4 / (int) 9.7等价于19 / 9,它首先被解析为 2(一个 int)。只有在计算完 2 之后,它才会被变量类型转换为浮点数。

于 2010-11-16T20:35:35.900 回答