double转换int,然后以float输出

mszjk 2009-03-28 07:30:19
很简单的一段代码
// visual studio 2005
#include<cstdio>
void main()
{
int a=145.80;
printf("%f",a);
}
我是在vs2005中实现的.
单步跟踪发现a一直存放145这个值.单步运行也会输出0.000000. // 这个可以理解
但是你直接ctrl+f5就会输出一大堆数字跟一大串的0.
好奇怪,有谁能解释一下么?
...全文
144 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bitxinhai 2009-03-28
  • 打赏
  • 举报
回复
这样输出是把145的二进制
解析成立了浮点数输出,
看看ieee 754标准,
你可能就明白了!!!
liliangbao 2009-03-28
  • 打赏
  • 举报
回复
浮点数和整数在内存的存储的格式是不一样的!
145被按照浮点数的格式输出时,表示的数就是近似0!
sunnyplain 2009-03-28
  • 打赏
  • 举报
回复
其实类似的问题在csdn上有人问过
%f,在输出的时候,是把对应位置的变量按double解析的(可参看printf的帮助),在2005中(在我们常用的pc机上),int占4字节,double占8字节。在输出的时候要把a按照double解析,那么就会把a后面的4个字节也算上,但这4个字节是没有初始化过的,是什么东西也不确定。

而调试时用到的内存可能是执行时用到的内存不一样,所以输出什么东西都不用奇怪
  • 打赏
  • 举报
回复
大哥,用cout,或者printf("%d",a); 吧

你这样做有意义吗?

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧