printf不会关心你输入的参数的类型,你输入的实际是 printf("%f",3),但是这个整型3不会被隐式类型转换为浮点型,而是被直接按内存内容当作浮点型
也就是说,内部使用等价于 int i = 3; printf("%f", *(float*)&i)
不幸的是,整型3在内存布局上如果看成浮点数,它就是接近于0

完整的说明一下吧。 首先 printf("%f",10/3);等价于 printf("%f",3);也就是说在这种情况下C不支持类型转换。并且"%f"处理的是double类型的浮点数也就是64位,而且默认的显示精度是小数点后6位。

然后要考虑浮点数的表示方法,根据IEEE 754标准对64位浮点数采用的表示为:     数符(1位)| 阶码 (11位) | 尾数 (52位) 好了,可以解决问题了。你的3是6个0 + 11, 知道为什么了吧? 数太小了! 在仅仅可以显示小数点6…

接近正确,整数3其实对应的是6个0+11+24个0+32位随机值 内存中整数3就是00000011 00000000 00000000 00000000 后面紧跟的是4字节堆栈上的当前值(可能是CS:IP)

这是不定参数的特点,没有类型检查,没有类型转换

不过如果打印一个固定值都能出现随机值,只能说crt出问题了 可能的原因(首先你要看一遍11楼给的说明) 因为进入printf时, 堆栈上传进来的只有sizeof(int)个字节,而double需要的字节数比int多,因此va_arg转换时除了你传进去的4字节之外,还用了堆栈 上的相连四个字节,而这四字节内容不是你设置的,可能会随编译器、OS不同由随机产生的可能性

记得之前看过一个介绍,printf输出时,float是当double处理的

下面的代码似乎能验证这一点:

//看起来不匹配,但都打印出了最后一个数字5,即float用double处理了
);
);

printf("%f\n", 3);输出结果为什么是0.000000(转载)的更多相关文章

  1. printf("%d",5.01)和printf("%f",5)的输出结果

    printf(); printf("%d\n",5.01); printf(); printf(.f); 输出结果: 看到结果,会感觉非常奇怪.1处怎么会输出0呢?2又为何会显示这 ...

  2. printf("%f\n",5);

    http://zhidao.baidu.com/link?url=87OGcxtDa6fQoeKmk1KylLu4eIBLJSh7CA3n5NWY-Ipm9TxZViFnIui307duCXWhaM0 ...

  3. 【Shell脚本学习15】shell printf命令:格式化输出语句

    printf 命令用于格式化输出, 是echo命令的增强版.它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同. 注意:printf 由 POSIX 标准所定义,移植性要比 ech ...

  4. shell printf命令:格式化输出语句

    printf 命令用于格式化输出, 是echo命令的增强版.它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同. 注意:printf 由 POSIX 标准所定义,移植性要比 ech ...

  5. Java数字格式化输出时前面补0

    Java数字格式化输出时前面补0 星期日 2014年11月30日|  分类: Java     /** * 里数字转字符串前面自动补0的实现. * */ public class TestString ...

  6. printf以%d形式输出浮点数的问题

    若运行时从键盘上输入9876543210l,则下面程序的输出结果是 int main(){ int a;float b,c; scanf("%2d%3f%4f",&a,&a ...

  7. PHP提升echo, printf, print, file_put_contents等输出方法的效率

    让ECHO变快, 让PHP的请求处理过程, 尽快结束, 之所以ECHO慢, 是在等待”写数据”成功返回, 那么一个比较简单的办法, 就是打开输出缓存, 编辑php.ini output_bufferi ...

  8. 通过printf设置Linux终端输出的颜色和显示方式

    转载自:http://www.cnblogs.com/clover-toeic/p/4031618.html 在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出 ...

  9. C语言实现printf的基本格式输出%d,%c,%p,%s

    关于printf的实现,想必看过我之前发表的文章的伙伴们已经了解了不少基本的知识.好了,接下来不多说了,直接上源码,看看一种简单的实现方式: #include <stdio.h> #def ...

随机推荐

  1. 旧板与IO板之间的连接

    COM3(底板)——COM3(IO板) COM4(底板)——COM2(IO板) 如果需要改东西就是执行下列命令 最后进行拍照测试和IO测试

  2. 一次完整的HTTP请求

    HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 1:建立TCP连接,TCP的三次握手 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服 ...

  3. react-redux: counter

    store: import {createStore,applyMiddleware, compose} from "redux"; import thunk from " ...

  4. 你不知道的sticky

    position:sticky,Chrome新版本已经做了支持.sticky的中文翻译是“粘性的”,position:sticky表现也符合这个粘性的表现.基本上,可以看出是position:rela ...

  5. Flask的消息message机制flash

    Flask的消息机制flash message是一个基于session实现的用于保存数据的集合,其特点是:使用一次就删除. 原理就是 操作成功 session['操作'] = 'msg' # 设置 s ...

  6. 《Drools7.0.0.Final规则引擎教程》第4章 4.2 lock-on-active

    lock-on-active 当在规则上使用ruleflow-group属性或agenda-group属性的时候,将lock-on-active 属性的值设置为true,可避免因某些Fact对象被修改 ...

  7. ng 变量和常量服务

    <!DOCTYPE html> <html ng-app="myApp"> <head lang="en"> <met ...

  8. Mouse without Borders 跨屏鼠标

    Mouse without Borders 跨屏鼠标 软件方式 当你有几台电脑同时工作时,不停的换鼠标和键盘是非常不方便的. 如果用的 Mouse without Borders 就不一样了,可以在多 ...

  9. hadoop之 Zookeeper 分布式应用程序协调服务

    (1) Zookeeper 在 Hadoop 集群中的作用 Zookeeper 是分布式管理协作框架,Zookeeper 集群用来保证 Hadoop 集群的高可用,(高可用的含义是:集群中就算有一部分 ...

  10. java工具类mht转html格式文件 及简单的HTML解析

    package com.szy.project.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStre ...