ANSI C中的浮点转换

vuv7lop3  于 2023-03-22  发布在  其他
关注(0)|答案(5)|浏览(134)

给出以下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中进行浮点转换?

5us2dqdw

5us2dqdw1#

在标准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 // result = 2.000000,为什么?
您要求将19.4强制转换为int,将9.7强制转换为int,这实际上要求编译器计算19/9 = 2的整数除法,然后将其提升为float以存储在b中。2变为2.0。
.PMCD.

uyto3xhc

uyto3xhc2#

在第2行中,您将输入值转换为整数,然后执行整数除法(因为除法的两个操作数都是整数,所以除法是在整数空间中完成的-这意味着任何小数结果都将被截断)。
所以19 / 9 = 2
然后,为了将这个整数转换为浮点数,它隐式地将2转换回2.000000

voase2hg

voase2hg3#

不,它必须是2。当你把一个int除以一个int,你得到一个int。因此2。你可以做一些恶作剧,然后把它转换成任何你喜欢的,但小数已经消失了。

hgqdbh6s

hgqdbh6s4#

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

vkc1a9a2

vkc1a9a25#

(int) 19.4 / (int) 9.7等价于19 / 9,先解析为2(一个int),2计算出来后才被变量类型转化为float。

相关问题