Java输出(y*++ z /(z-- -6.0)+'d'*0.5);

wun*_*jah 0 java ascii term

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?

Mar*_*ger 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


pet*_*rov 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);

    }
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长,浮动或双倍
- 长期浮动或双重
- 浮动加倍