zoukankan      html  css  js  c++  java
  • printf("%f ",5);

    http://zhidao.baidu.com/link?url=87OGcxtDa6fQoeKmk1KylLu4eIBLJSh7CA3n5NWY-Ipm9TxZViFnIui307duCXWhaM0O6lrx2G8z-1HLXVpz0q
    #include <stdio.h>
    main()
    {
    printf("%f ",5);
    }
    为什么屏幕输出的结果是0.000000,但是如果是(float)5,结果就正确,请详细说明
    用cc编译printf("%f
    ",5)为什么是0.000000,而不是5.000000,哪方面的问题,编译器、系统,还是说C语言本身就有这个问题,请详细说明原因


    1,之所以没输出5,这是C语言设计的原因。
    2,之所以输出0,这是计算机体系结构的问题。

    具体来说:

    printf函数不会进行任何类型转换,它只是从内存中读出你所提供的元素的值(按照%d,%f等控制字符提示的格式)。C语言设计中,int类型一般是32bit或者16bit,而float一般是64bit,并且有可能使用科学计数保存。这点就和huhugo88所说一样,5在内存中为00000000,00000101。而且5一般都在静态区,程序的静态存储区默认是0,那么当用%f来读时,就会读64bit,也就是会读之前的很多位0,最后按照(有效数字)×(基数2)pow(指数)的方式来取数,自然结果是0

    之所以Vc中不允许这种情况,而有些编译器就允许这么输出就是编译器设置的问题。按理说,这样访问内存是属于越界访问,应该禁止。不过只是读,伤害性不大而已。
  • 相关阅读:
    C#中virtual 方法和abstract方法的区别
    解决zabbix的cannot allocate shared memory of size错误
    批量改名的shell脚本
    /bin/bash和/bin/sh的区别
    搭建redmine全攻略——与apache整合(CentOS 5.8 64位)
    内网监控利器——Nagios
    Maven
    TypeScript
    ShardingSphere
    Spring框架源码分析
  • 原文地址:https://www.cnblogs.com/chucklu/p/4021575.html
Copyright © 2011-2022 走看看