黑马程序员技术交流社区

标题: +-*、之后,数据类型问题。 [打印本页]

作者: 朱东方    时间: 2012-7-14 18:13
标题: +-*、之后,数据类型问题。
设x为float型变量,y为double型变量,a为int型变量,b为long型变量,c为char型变量,
则表达式x+y*a/x+b/y+c计算结果的类型为什么?

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

thank  u ....
作者: 张_涛    时间: 2012-7-14 18:27

表达式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类型。
作者: 丁朋    时间: 2012-7-14 18:33
张_涛 同学已经讲得很清楚了,基本上有double类型参与运算结果就是double。你去了解下强制转换的优先级,你就明白了!
作者: 朱东方    时间: 2012-7-14 18:38
张_涛 发表于 2012-7-14 18:27
表达式x+y*a/x+b/y+c是从左往右进行运算的,当两个变量进行运算时,自动将精确度低的转换为精确度高的再进 ...

char<int<long<float<double

记住这个就行了呗,与什么运算无关。是不是。
只要是算数运算结果就自动转换为高精度的。
作者: 韩伟    时间: 2012-7-14 18:50
在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型的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2