一个简单而复杂的问题

量化分析 2011-10-20 03:52:35
printf("%d",4.0);
这个语句为什么会后面的数字不一样会输出不一样的结果?
末尾为单位数 1 3 5 。。。 为正位数
末尾为双位数偶数 2 4 6.。。。 为负数 。。
why??
知道的告诉声嘛~
...全文
203 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-12-25
  • 打赏
  • 举报
回复
heis07w 2011-10-20
  • 打赏
  • 举报
回复
4.0是浮点数,4是整数。这两种类型的数在内存中编码存储方式有很大差别。
你的%d是告诉编译器按整数的内存编码方式(补码)去解释那块实际上是存浮点数的内存。

fuck与操是同一个意思,但你用中文去解释英文fuck会解释为“发克”,而不是原来的意思
goldbeef 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhao4zhong1 的回复:]

VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。

搜“浮点表示法”
1.0→00 00 00 00 00 00 F0 3F
2.0→00 00……
[/Quote]赵老师说的精辟啊,学习了
goldbeef 2011-10-20
  • 打赏
  • 举报
回复
恩,果然是IEE754
AnYidan 2011-10-20
  • 打赏
  • 举报
回复
google IEEE754
zhOu 2011-10-20
  • 打赏
  • 举报
回复
2楼说得对
ljhhh0123 2011-10-20
  • 打赏
  • 举报
回复
printf函数在运行时才解释第二个参数的内容,%d代表整数,而且浮点表示法和整数表示法是不同的。
赵4老师 2011-10-20
  • 打赏
  • 举报
回复
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。

搜“浮点表示法”
1.0→00 00 00 00 00 00 F0 3F
2.0→00 00 00 00 00 00 00 40
3.0→00 00 00 00 00 00 08 40
4.0→00 00 00 00 00 00 10 40
5.0→00 00 00 00 00 00 14 40
6.0→00 00 00 00 00 00 18 40
量化分析 2011-10-20
  • 打赏
  • 举报
回复
是跟溢出有关吗???
薛定谔之死猫 2011-10-20
  • 打赏
  • 举报
回复
是的,路上几位说的是正确的
bdmh 2011-10-20
  • 打赏
  • 举报
回复
4.0被当做浮点数,浮点数存储和整数不一样
cfvmario 2011-10-20
  • 打赏
  • 举报
回复
这要看系统和编译器是如何实现浮点数的存放的
不过多数系统是IEEE浮点标准吧

69,382

社区成员

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

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