关于浮点型与整型之间转换的问题!!!

skyliuxu 2012-05-11 10:10:43

int ix;
float fx;
ix = INT_MAX;
show_int(ix); // ff ff ff 7f
fx = (float)ix;
show_float(fx); // 00 00 00 4f
iy = (int)fx; // ix != iy
show_int(iy); // 00 00 00 80
iy = (int)(float)ix;

请大侠指点,为什么(int)(float)ix和分开先fx =(float)ix再(int)fx结果不一样呢?按照转换的规则,应该是后者正确,那前者是什么机理呢?大家多多发言哈!!!
...全文
361 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyliuxu 2012-05-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
我在vc6下试了,结果一样啊
[/Quote]
我用的VS2008,我觉得也是编译器的问题
skyliuxu 2012-05-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
这牵扯到寄存器的问题
前面两次强制类型转换,都赋值给了具体的变量
最后一次,iy = (int)(float)ix;没有中间环节
整个过程都是在寄存器中操作的。
所以数据没有丢失
[/Quote]
即便是这样,转化为float之后变成2147483648,再转化为int应该溢出,那么应该赋值为整型的最小值-2147483648呀,为什么保持了int的值没变呢?
skyliuxu 2012-05-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
如果说不挨边,那就是你的理解错了。
[/Quote]
摆脱,我问的是为什么分开转换和连续转换结果不一样!
石头翔子 2012-05-12
  • 打赏
  • 举报
回复
这牵扯到寄存器的问题
前面两次强制类型转换,都赋值给了具体的变量
最后一次,iy = (int)(float)ix;没有中间环节
整个过程都是在寄存器中操作的。
所以数据没有丢失
fengfuwei8 2012-05-12
  • 打赏
  • 举报
回复
不挨边么?看看挨边的!
W170532934 2012-05-12
  • 打赏
  • 举报
回复
如果说不挨边,那就是你的理解错了。
Keepower 2012-05-12
  • 打赏
  • 举报
回复
我在vc6下试了,结果一样啊
skyliuxu 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
由于float和int的数据在内存内部组织方式不同,决定了你目前见到的这个问题。具体的可以看下《深入理解计算机系统》float在协处理器中处理,位数比Int多点。处理方式不同。强行转换的话就导致了int的溢出了
[/Quote]
你说的跟我问的问题哪也不挨哪呀,还是谢谢你好心啦
W170532934 2012-05-11
  • 打赏
  • 举报
回复
由于float和int的数据在内存内部组织方式不同,决定了你目前见到的这个问题。具体的可以看下《深入理解计算机系统》float在协处理器中处理,位数比Int多点。处理方式不同。强行转换的话就导致了int的溢出了

69,373

社区成员

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

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