int i=3;
float n;
n=1/i;
printf(“%f”,n);
n为什么等于0
这个问题看似简单,其实涉及到类型、隐式转换、运算优先级等基本概念
1.当两个类型不同的变量进行运算时,会自动将小类型隐式转换成大类型
比如int+double,那么int会转变为double,并且结果也是double
2.运算有优先级,当表达式比较复杂时,每一步都将进行上述操作。比如int/int+double,先进行int类型的除法,返回值也是int,没有小数,再进行double类型的加法,结果带小数;如果是int/(int+double),那么先进行double类型的加法,再进行double类型的除法,这样就不会丢失精度
3.看回你的代码,因为1默认是int型的常量,i是int型的变量,所以结果是int,再把int型赋值给double型的变量n,所以n即使是double型,还是不会有小数部分
4.想要实现n有小数,有多种办法。(1)强制转换类型:n=1/(double)i;(2)利用上述规则,让它自动隐式转换:n=1.0/i;