考虑到以下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中如何进行浮点转换?

有帮助吗?

解决方案

在标准C中,除非另有说明,否则假定诸如19.4和9.7之类的文字是两倍(例如19.4f,9.7f)。

编译器将使用整数除法函数来计算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。

其他提示

在第2行中,您将输入值转换为整数,然后进行整数划分(因为鸿沟的两个操作数都是ints,因此划分在整数空间中完成 - 这意味着任何分数重新启动都会被截断)。

因此,19/9 = 2

然后,要将这个整数变成浮点,它隐式将2转换回2.000000

不,必须是2。当您将int除以int时,就会得到一个int。因此2.您可以随后进行Hokey-Pakey,将其转换为您喜欢的任何东西,但是小数已经消失了。

划分两个整数,您将获得一个整数。将浮子和整数分开,您将获得浮标。

(int) 19.4 / (int) 9.7 等同于 19 / 9, ,首先分为2(一个int)。只有在计算2次之后,才通过变量类型将其变成浮标。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top