给出以下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中进行浮点转换?
5条答案
按热度按时间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.
uyto3xhc2#
在第2行中,您将输入值转换为整数,然后执行整数除法(因为除法的两个操作数都是整数,所以除法是在整数空间中完成的-这意味着任何小数结果都将被截断)。
所以19 / 9 = 2
然后,为了将这个整数转换为浮点数,它隐式地将2转换回2.000000
voase2hg3#
不,它必须是2。当你把一个int除以一个int,你得到一个int。因此2。你可以做一些恶作剧,然后把它转换成任何你喜欢的,但小数已经消失了。
hgqdbh6s4#
将两个整数相除,得到一个整数;将一个浮点数和一个整数相除,得到一个浮点数。
vkc1a9a25#
(int) 19.4 / (int) 9.7
等价于19 / 9
,先解析为2(一个int),2计算出来后才被变量类型转化为float。