日期:2014-05-20  浏览次数:20876 次

这些数是怎么计算的?
Java code

        int a = 3;
        a += a -= a * a;
        System.out.println(a);                // 输出-3
        
        int b = 10;
        b = b++;
        System.out.println(b);                // 输出10
        
        int c = 5;
        c += c++ + (c++ + 0);
        System.out.println(c);                // 输出16
        
        int d = 3;
        d = (d++) + (d++) + (d++);
        System.out.println(d);                // 输出12



这些数是怎么计算的?结果值好神奇。。。。

------解决方案--------------------
真恶心
------解决方案--------------------
无聊的题

就跟问你爸爸的姐姐的妈妈的孙子是谁一样
------解决方案--------------------
查编译过后的字节码
------解决方案--------------------
I、3+(3-3*3)= -3

II、b++是先赋值后++的

III、先做括号里的(C++ + 0)=5,这时C=6了,所以右侧 = 11,将左侧的5 + 11得到16

IV、d++是先运算后加,所有右侧式=3+4+5=12
------解决方案--------------------
int a = 3;
a += a -= a * a;
System.out.println(a); // 输出-3

 运算符的优先级及计算规则了解的话很简单

a=a+(a-(a*a));最后a就是3

int b = 10;
b = b++;
System.out.println(b); // 输出10

后置++是先计算后++所以 b=b++;实际等同于b=b;还是10


 int c = 5;
c += c++ + (c++ + 0);
System.out.println(c); // 输出16

有括号先计算括号 c先+0然后对c进行+1 即 c+=6+5 最后等于16

int d = 3;
d = (d++) + (d++) + (d++);
System.out.println(d); // 输出12

第一步计算第一个括号里的d++结果是3对d+1 d=4,计算第二个括号里的d++结果是4再对d+1 d=5,计算第三个括号结果是5 3+4+5 = 12

------解决方案--------------------
这些是程序语言基础的运算符优先级问题,请楼主学习一下+-*/和++等的优先级,就明白了
------解决方案--------------------
都是从右到左
int a = 3;
a += a -= a * a;
----------------------
1:a*a=6
2:a -= a*a就等于a = a- a*a;所以a=-6
3:a += (**);就等于a = a+(**)
4:所以a += -6=>a=a-6=3
===================================
int b = 10;
b = b++;
这个在Java中,是b先赋值后自加,所以左边的b还是10
打印b是打印左边的b,C++就是打印右边的b
=========================================
int c = 5;
c += c++ + (c++ + 0);
这个不是很懂啊
它等于int b = c+ c++ +(c++ +0)



------解决方案--------------------
一题
Java code

int a = 3;
a += a -= a * a;//先计算a*a=9;-->再计算3-9=-6-->再计算a=3+(-6)=-3
System.out.println(a);

------解决方案--------------------
Java code

        int a = 3;
        a += a -= a * a;
//      先算 a*a; 然后 a += a; 最后(a+=a) -= (a*a)  
        System.out.println(a);                // 输出-3
        
        int b = 10;
        b = b++;
        System.out.println(b);                // 输出10
        // 等价 b = b; System.out.println(b); b++;

        int c = 5;
        c += c++ + (c++ + 0);
        System.out.println(c);                // 输出16
        //先 (C++ + 0),就这个c=6,其他两个都是5
        int d = 3;
        d = (d++) + (d++) + (d++);
        //d = 3 + 4 + 5;; d++先使用d,在使d增加1
        System.out.println(d);                // 输出12

------解决方案--------------------
探讨
I、3+(3-3*3)= -3

II、b++是先赋值后++的

III、先做括号里的(C++ + 0)=5,这时C=6了,所以右侧 = 11,将左侧的5 + 11得到16

IV、d++是先运算后加,所有右侧式=3+4+5=12

------解决方案--------------------