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

时间:2014-04-02 16:10:44

标签: 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);

结果是80.0,但我不知道为什么?

d是ASCII码编号100.
第一学期是80第二学期,第二学期是第二学期是50?

3 个答案:

答案 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