开发者社区> 问答> 正文

printf 函数输出

#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]

请问输出结果为什么这么奇怪(第二个输出除外)?

展开
收起
a123456678 2016-06-08 16:00:09 1843 0
1 条回答
写回答
取消 提交回答
  • 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的二进制数字,所以会出现这样的数字

    2019-07-17 19:32:10
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载