博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
printf("%f\n",5);
阅读量:5931 次
发布时间:2019-06-19

本文共 679 字,大约阅读时间需要 2 分钟。

http://zhidao.baidu.com/link?url=87OGcxtDa6fQoeKmk1KylLu4eIBLJSh7CA3n5NWY-Ipm9TxZViFnIui307duCXWhaM0O6lrx2G8z-1HLXVpz0q #include 
main() {
printf("%f\n",5); } 为什么屏幕输出的结果是0.000000,但是如果是(float)5,结果就正确,请详细说明
用cc编译printf("%f\n",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中不允许这种情况,而有些编译器就允许这么输出就是编译器设置的问题。按理说,这样访问内存是属于越界访问,应该禁止。不过只是读,伤害性不大而已。

转载地址:http://cfutx.baihongyu.com/

你可能感兴趣的文章
linux下控制帐户过期的多种方法
查看>>
实现Action逻辑
查看>>
学习像树一样活着!
查看>>
中国软件开发工程师之痛
查看>>
话里话外:企业吉祥高歌唱未来需“三宝”
查看>>
理解BPDU Guard的意义(BPDU Guard在全局配置与接口配置上的区别)
查看>>
互联网教育, 免费 !没有未来!!
查看>>
Hyper-V 2016 系列教程18 Windows 上的 Hyper-V 和 Windows Server 上的 Hyper-V 之间的差异
查看>>
How To Setup MongoDB 4.0 Replica Set
查看>>
有关软件测试的五大谣言
查看>>
SQL Server 2017 AlwaysOn AG 自动初始化(十)
查看>>
少说话多写代码之Python学习007——字符串的方法01
查看>>
linux系统安全基础汇总
查看>>
Python辅助安全测试常用代码示例
查看>>
6425C-Lab8 使用组策略管理安全性(2)
查看>>
Hadoop HDFS Java API
查看>>
在Linux系统中安装LAMP出现的错误总结
查看>>
tensorflow 机器学习资料及其工具库
查看>>
无法访问“Sysvol”“Netlogon”文件夹
查看>>
云桌面的未来(二)
查看>>