A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱东方 中级黑马   /  2012-7-14 18:13  /  1718 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

设x为float型变量,y为double型变量,a为int型变量,b为long型变量,c为char型变量,
则表达式x+y*a/x+b/y+c计算结果的类型为什么?

这只是个例子,希望能详细的写上 数据类型 什么时候改变。什么时候不变。

thank  u ....

4 个回复

倒序浏览

表达式x+y*a/x+b/y+c是从左往右进行运算的,当两个变量进行运算时,自动将精确度低的转换为精确度高的再进行运算
各种类型类型的精度比较为: char<int<long<float<double
运算顺序为下:
1.y*a/x:其中y*a,由于double类型精确度高,故将a由int转换为double,然后进行计算,结果为double类型,再/x,再将x转换为double类型,进行计算,结果为double类型
2.b/y:b为long,y为double,故将b转换为double,再进行计算,结果为double类型
3.x+y*a/x: +号前面为float类型,后面为double类型,故将x转换为double类型再进行计算,结果为double类型
4.x+y*a/x+b/y:第二个+号左右都为double,故直接运算,结果为double类型
5.x+y*a/x+b/y+c:第三个+号左边为double类型,右边为char类型,故将c转换为double类型,再进行元算,最后结果为double类型。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
张_涛 同学已经讲得很清楚了,基本上有double类型参与运算结果就是double。你去了解下强制转换的优先级,你就明白了!
回复 使用道具 举报
张_涛 发表于 2012-7-14 18:27
表达式x+y*a/x+b/y+c是从左往右进行运算的,当两个变量进行运算时,自动将精确度低的转换为精确度高的再进 ...

char<int<long<float<double

记住这个就行了呗,与什么运算无关。是不是。
只要是算数运算结果就自动转换为高精度的。
回复 使用道具 举报
在JAVA中,没有特别指明的情况下,看见一个整数就是 int 型的,看见一个带小数点儿的就默认为是 double 型的。
在JAVA中类型转换,默认的是:byte、char、short>int>long>float>double。也就是说byte、short、char型的变量和 int 类型变量进行运算时会自动转换成 int  ,也就是说短的数据类型与长的数据类型进行运算时会自动转换成长的。如果是后面长的数据类型要转变成短的,比如 long 类型转换成 int 就要进行强制转换,long a = 10;int b = (int)a。
还有一点儿是,在JAVA中一种类型与String类型进行 + 操作时会自动转换成String类型。
所以楼主给的表达式不用分析,只要看见里面有double型的变量,那么最后的结果肯定是double型的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马