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,%d\n",3,4,5);
printf("%d,%d,%d\n", (float)3.4, 5);

转载于:https://www.cnblogs.com/xiaobiexi/p/3287519.html

printf(%f\n, 3);输出结果为什么是0.000000(转载)相关推荐

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

    printf("%f\n",5); printf("%d\n",5.01); printf("%f\n", (float)5); print ...

  2. printf(“%.1f\n“,8/5)的输出结果为什么是0.000000

    原因在于printf函数printf函数不会进行任何类型转换,它只是从内存中读出你所提供的元素的值. 8/5的算术表达式的到的是一个整型常量1,它被以整型存储在内存中. printf("%d ...

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

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

  4. printf(“%f“,a/b)

    关于int a= 10 ; int b = 3 ; printf("%f\n",a/b)无法输出的问题 定义变量一般使用的是" 类型 名称 "的格式,例如:in ...

  5. C语言 输入一个华氏温度F,要求输出摄氏度C。

    C语言 输入一个华氏温度F,要求输出摄氏度C. 公式为: C=5/9(F-32) 代码: #include <stdio.h> void main(){ float C,F; printf ...

  6. printf格式字符串和输出列表个数及类型不匹配案例

    printf函数不会进行任何类型转换(包括隐式转换),它只是从内存中读出你所提供的元素的值(按照%d,%f等控制字符提示的格式) void main() {int i=10.0/3;float j=1 ...

  7. C语言printf()格式化输出

    printf()函数 请求printf()函数打印数据的指令要与待打印数据的类型相匹配.例如,打印整数时使用%d,打印字符时使用%c.这些符号被称为转换说明(conversion specificat ...

  8. 【C】printf按8进制、10进制、16进制输出以及高位补0

    #include <iostream> #include <iomanip> #include "Circle.h" // Circle class dec ...

  9. c语言将字符输出到屏幕中央,C语言printf“()”真的会将输出发送到屏幕吗?

    printf函数是C语言的标准函数库中的一个输出函数,它的功能就是表面上把数据输出到屏幕中.这里要注意一下,我提到了一个词是"表面"!看似好像C语言的printf函数把数据输出到屏 ...

最新文章

  1. NAR:查询未培养病毒基因组的综合生态和进化框架IMG/VR v3
  2. maven scope 属性和生命周期
  3. spinbox的valuechanged 不响应键盘_键盘的选择实在太多,一个国产外设品牌最新旗舰机械键盘青轴版...
  4. Android网络课程笔记-----Actionbar的实现方式
  5. mysql创建数据库指定字符集
  6. http抓包实战 pdf_网络协议HTTP 协议(抓包实战和网络分层)
  7. Java 蓝桥杯 判断闰年
  8. 互联网产品哪个不火哪个就在红利期
  9. RHEL 7.6 安装 Oracle 18c RAC
  10. 《数源思维》提问工具之“语法套”
  11. 关联——Apriori算法详解
  12. win7中竟然没有telnet.exe??
  13. 华为手机升级回退_华为手机版本回退 - 卡饭网
  14. 在阿里云建网站体验123
  15. 纠错式教学法对比鼓励式教学法 -----Lily、贝乐、英孚,乐加乐、剑桥国际、优学汇、北外青少...
  16. Rush Leetcode
  17. 免费云存储工具类——七牛云(更改配置信息,直接使用)
  18. 带你玩转以太坊智能合约的”Hello World“
  19. SDHC介绍(收集网上资料-仅供学习之用)
  20. 热设计功耗(TDP)与功耗(P)

热门文章

  1. (三) OpenCV仿射变换与透射变换(Affine and Perspective Transform)
  2. 数字化方法基础(三)_导入本地模型
  3. php能连接动易吗,动易CMS数据转成dedecms的php程序
  4. cadence 常见pcb电阻_CADENCE从原理图到PCB步骤 精
  5. three.js 几何体-组合网格_张柏芝西装穿出性感范,清纯白配黑色网格,这造型一般人挺难驾驭...
  6. linux pwm测试程序,DM8168 PWM驱动与测试程序
  7. Python数据结构与算法(1.2)——Python基础之变量与内置数据类型
  8. Python-Matplotlib可视化(8)——图形的输出与保存
  9. rstudio创建矩阵_R中的矩阵
  10. Pandas DataFrame索引和列属性