#include <stdio.h>
int main() {
printf("%f\n", 5);
printf("%f\n", 5.0);
printf("%d\n", 5.01);
return 0;
}
输出结果:
0.000000
5.000000
1889785610
[Finished in 0.3s]
请问输出结果为什么这么奇怪(第二个输出除外)?
c语言中printf不会对类型进行转换,它只是按照对应格式(如%d,%f等)从内存中读取值.
内存中的存储方法是二进制.
第一种
int类型一般为16bit或者32bit,从第三种的结果看是32bit,5就是0000,0000,0000,0000,0000,0000,0000,0101
如果按照float(64bit)来读取的话前面会多读取很多未写入的位(都是0),最后按照(有效数字)*(基数2)pow(指数)的方式取数,结果就是0.
第二种是正常读取
第三种就是按照%d(32bit)来读取5.01的二进制数字,所以会出现这样的数字
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。