double x = 4.0;
long y = 10;
byte z = 8;
char c = 'd';
System.out.println (y*++z / (z-- -6.0) + 'd'*0.5);
结果是80.0,但我不知道为什么?
d
是ASCII码编号100.
第一学期是80第二学期,第二学期是第二学期是50?
答案 0 :(得分:6)
第一个词是30,第二个词是50.总计80个。
'd'= 100
100 * 0.5 = 50
++ z = 9
y * ++ z = 10 * 9 = 90
z-- = 8,但手术后。在操作中它仍然是9
z-- - 6.0 = 9 - 6 = 3
90/3 = 30
30 + 50 = 80
答案 1 :(得分:5)
只需将其分成更小的部分就可以清楚地知道为什么结果为80.0。
public static void main(String[] args) {
double x = 4.0;
long y = 10;
byte z = 8;
char c = 'd';
System.out.println (y*++z); // this is 10 * 9 = 90
System.out.println ((z-- -6.0)); // this is 9 - 6 = 3
System.out.println ('d'*0.5); // this is 100 * 0.5 = 50.0
// System.out.println (y*++z / (z-- -6.0) + 'd'*0.5);
}
如果您需要更严格的治疗,请检查JLS的这一部分。
我认为这个问题是关于运营商优先权的 而且还有关于扩大操作数的转换。
原始类型的19个特定转换
被称为扩大的原始转换:
- 字节到短,int,long,float或double
- 短至int,long,float或double
- char到int,long,float或double
- int to long,float或double
- 长期漂浮或双重 - 浮动加倍
答案 2 :(得分:0)
(y ) * (++z) / ( (z--) - (6.0) ) + 'd' * 0.5
(10) * (++8) / ( (8--) - (6.0) ) + 'd' * 0.5 // z = 9
(10) * (9) / ( (9--) - (6.0) ) + 100 * 0.5 // z-- comes to 9--
(10) * (9) / ( (9) - (6.0) ) + 100 * 0.5
90 / ( 3.0 ) + 50
30.0 + 50
80.0