double x = 4.0;
long y = 10;
byte z = 8;
char c = 'd';
System.out.println (y*++z / (z-- -6.0) + 'd'*0.5);
Run Code Online (Sandbox Code Playgroud)
结果是80.0,但我不知道为什么?
d是ASCII码编号100.
第一项是80秒,第二项是第三项是50?
第一项是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
只需将它分成更小的部分就可以清楚地知道为什么结果是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);
}
Run Code Online (Sandbox Code Playgroud)
如果您需要更严格的治疗,请检查JLS的这一部分.
我认为这个问题是关于运算符优先级的,
但也是关于扩展操作数的转换.
对原始类型的19个特定转换
称为扩展原语转换:
- byte to short,int,long,float或double
- short to int,long,float或double
-char to int,long,float或double
-int长,浮动或双倍
- 长期浮动或双重
- 浮动加倍
| 归档时间: |
|
| 查看次数: |
666 次 |
| 最近记录: |