黑马程序员技术交流社区

标题: 求这题自加运算的详细过程 [打印本页]

作者: fly897851817    时间: 2015-8-1 09:51
标题: 求这题自加运算的详细过程
int a = 3, b;
b = (a++)+(++a)+(a++)*2+a+(++a);
求b的详细算法过程  谢谢 大神
int a = 4;
        int b = (a++)+(++a)+(a*10)+(a++);
        System.out.println("a="+a);
        System.out.println("b="+b);
求大神帮帮

作者: 青春是你的烟火    时间: 2015-8-1 09:51
注意两点:
1. 在系统里,a与b的存储位置唯一
2. ++a,--a是先进行自增、自减处理,再处理表达式;而a++,a--是先计算表达式,再进行自增、自减处理。
*(把每一个表达式单独计算)*例子一:             int a = 3, b;
             b = (a++)+(++a)+(a++)*2+a+(++a); 输出结果:b = 31处理过程如下:
  1. public class Test01 {
  2.         public static void main(String[] args) {
  3.                 int a = 3, b;
  4.                 b = (a++);
  5.                 //    3
  6.                 System.out.println(b);
  7.                 //输出:3
  8.                 //先计算表达式,然后完成自增。   此时:   b = 3, a = 4
  9.                
  10.                 b = 0;a = 3;
  11.                 b = (a++) + (++a);
  12.                 //    3   +    5
  13.                 System.out.println(b);
  14.                 //输出:8
  15.                 //先完成自增,然后计算表达式。   此时:   b = 8, a = 5
  16.                 b = 0;a = 3;
  17.                 b = (a++) + (++a) + (a++) * 2;
  18.                 //    3   +   5   +   5   * 2
  19.                 System.out.println(b);
  20.                
  21.                 //输出:18
  22.                 //先计算表达式,然后自增运算。   此时:   b = 18, a = 6
  23.                
  24.                 b = 0;a = 3;
  25.                 b = (a++) + (++a) + (a++) * 2 + a;
  26.                 //    3   +   5   +   5   * 2 + 6
  27.                 System.out.println(b);
  28.                 //输出:24
  29.                 //先计算表达式,然后自增运算。   此时:   b = 18, a = 6
  30.                 //直接相加
  31.                
  32.                 b = 0;a = 3;
  33.                 b = (a++) + (++a) + (a++) * 2 + a + (++a);
  34.                 //    3   +   5   +   5   * 2   6 +   7
  35.                 System.out.println(b);
  36.                 //输出:31
  37.                 //先计算表达式,然后自增运算。   此时:   b = 24, a = 7
  38.                
  39.         }

  40. }
复制代码

例子二:         int a = 4;        int b = (a++)+(++a)+(a*10)+(a++);
        System.out.println("a="+a);
        System.out.println("b="+b);输出结果:a = 7, b = 76处理过程如下:
  1. public class Test02 {
  2.         public static void main(String[] args) {
  3.                 int a = 4;
  4.                 int b = (a++);
  5.                 //        4
  6.                 System.out.println("a=" + a + ",b=" + b);
  7.                 b = 0;

  8.                 a = 4;
  9.                 b = (a++) + (++a);
  10.                 //    4   +    6
  11.                 System.out.println("a=" + a + ",b=" + b);
  12.                 b = 0;

  13.                 a = 4;
  14.                 b = (a++) + (++a) + (a * 10);
  15.                 //    4   +   6   + (6 * 10)
  16.                 System.out.println("a=" + a + ",b=" + b);
  17.                 b = 0;

  18.                 a = 4;
  19.                 b = (a++) + (++a) + (a * 10) + (a++);
  20.                 //    4   +   6   +  (6 *10) +  6
  21.                 //最后一次运算:(a++),先参与运算,把结果赋值到b, 然后才是++
  22.                 //例如:
  23.                 //int a = 1;
  24.                 // b = (a++);
  25.                 // b = 1;与有无括号没有关系
  26.                 // 计算完表达式,之后a就++了,这样a 就是 a = 7
  27.                 System.out.println("a=" + a + ",b=" + b);

  28.         }

  29. }
复制代码
希望可以帮助到你。



作者: 70852    时间: 2015-8-1 11:52
解法在附件的图里

无标题.png (93.55 KB, 下载次数: 4)

无标题.png

作者: fly897851817    时间: 2015-8-1 14:06
青春是你的烟火 发表于 2015-8-1 12:09
注意两点:
1. 在系统里,a与b的存储位置唯一
2. ++a,--a是先进行自增、自减处理,再处理表达式;而a++,a- ...

非常感谢  我懂了  谢谢
作者: 沉醉    时间: 2015-8-1 14:19
++优先于+,后++是在给表达式返回一个值后进行++操作,前++是在进行++操作后给表达式返回一个值,所以b=3+5+5*2+6+7=31,要明确++是在整个表达式计算之前完成的,完成之后才进行+操作和=操作
作者: yangkai69    时间: 2015-8-1 16:31
写的好详细,赞一个
作者: DUKEMAN    时间: 2015-8-4 13:12
青春是你的烟火,解答确实耐心细致,确实要注意变量在内存中的位置,运算符的优先顺序和用法意义。
作者: 铿锵的小黑马    时间: 2015-8-8 14:56
好棒好棒 .....




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2