| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 658 人关注过本帖
标题:简单的问题包含了复杂的东西(请大家指教)
只看楼主 加入收藏
Java初学者
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2005-2-20
收藏
 问题点数:0 回复次数:3 
简单的问题包含了复杂的东西(请大家指教)

float x=1.0f; x=x+1.0;//错误 这里的错误我能理解:java里float类型的变量或者数值从内存读出送给加法器进行运算前先要将变量的值转换成double类型,这样x+1.0运算好后的值为double,再要赋给float类型的x可能会丢失精确度,java不允许这样.

float x=1.0f; x+=1.0;//正确,为什么?

x+=1.0;这句话基本上所有书上说等价于:x=x+1.0; 真的完全等价吗?我觉得不是,至少它在机器硬件里运算时用的器件或者说运算时的步骤会不一样.请问谁能说说这2句语句有什么区别或者在机器里到底如何运行的吗?

搜索更多相关主题的帖子: 指教 
2005-03-01 21:09
tempnetbar
Rank: 2
等 级:新手上路
威 望:4
帖 子:582
专家分:4
注 册:2004-5-5
收藏
得分:0 
你大致可以理解为x+=1.0隐含了一个强制类型转换吧。对于你的例子具体来说就是x=(float)(x+1.0);
不知道这么理解对不对,不过我测试过,x+=1.0后x为float类型,当然你也可以理解为x+=1.0时编译器并没有把它转换为double。。。这种问题个人认为知道就好了过分深究没有意义

相信勤能补拙! 喜欢用好用的就永远学不到有用的。
2005-03-02 07:24
Java初学者
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2005-2-20
收藏
得分:0 
tempnetbar:感谢你对我的几个问题的指点.

关于这个问题,我已经在很多地方问过很多人,包括在csdn上,现在还是觉得你把它看成
x=(float)(x+1.0);最合适.
象:byte x=1;x=x+1;//错误
而byte x=1;++x;//正确
也可以这样理解x=(byte)(x+1);

不过至于你说的"x+=1.0后x为float类型",我觉得那是肯定的.因为运算符的操作数类型不一致时要进行类型指的是值或者说变量的值,而不是变量,变量一旦声明好类型就应该不会再变了.

还有你说的"x+=1.0时编译器并没有把它转换为double",我觉得这样说是错误的.因为byte,short,char类型的值或者变量再参加运算前先必须转换成int型,哪怕是2个byte型的参加运算;
float类型也是,一定要先转换成double型.所以根据这个,使你前面的那种说法更加可信度(虽然也不一定正确)

tempnetbar,你说过分深究这样的问题没有意义,不知道为什么,我看到这里搞不明白好象就不想往下看,好在现在我觉得你的这种说法我觉得可以接受,能解释这个问题了.看来我的学习方法有问题.
2005-03-02 12:06
tempnetbar
Rank: 2
等 级:新手上路
威 望:4
帖 子:582
专家分:4
注 册:2004-5-5
收藏
得分:0 
嗯……学习的话有时候就是要糊涂一点,当然该清楚地时候也要清楚。这个要自己去把握了。呵呵
还有关于你提到的那点,我的意思是x+1.0是float呵呵

[此贴子已经被作者于2005-3-2 13:14:34编辑过]



相信勤能补拙! 喜欢用好用的就永远学不到有用的。
2005-03-02 13:12
快速回复:简单的问题包含了复杂的东西(请大家指教)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021887 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved