A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fly897851817 中级黑马   /  2015-8-1 09:51  /  2749 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
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);
求大神帮帮

最佳答案

查看完整内容

注意两点: 1. 在系统里,a与b的存储位置唯一 2. ++a,--a是先进行自增、自减处理,再处理表达式;而a++,a--是先计算表达式,再进行自增、自减处理。*(把每一个表达式单独计算)*例子一: int a = 3, b;[/backcolor] b = (a++)+(++a)+(a++)*2+a+(++a); [/backcolor]输出结果:b = 31[/backcolor]处理过程如下:[/backcolor] 例子二: [/backcolor]int a = 4;[/backcolor] int b = (a++)+ ...

8 个回复

倒序浏览
注意两点:
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. }
复制代码
希望可以帮助到你。


点评

非常感谢 懂了 谢谢了  发表于 2015-8-1 14:07
回复 使用道具 举报
解法在附件的图里

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

无标题.png
回复 使用道具 举报
青春是你的烟火 发表于 2015-8-1 12:09
注意两点:
1. 在系统里,a与b的存储位置唯一
2. ++a,--a是先进行自增、自减处理,再处理表达式;而a++,a- ...

非常感谢  我懂了  谢谢
回复 使用道具 举报
++优先于+,后++是在给表达式返回一个值后进行++操作,前++是在进行++操作后给表达式返回一个值,所以b=3+5+5*2+6+7=31,要明确++是在整个表达式计算之前完成的,完成之后才进行+操作和=操作
回复 使用道具 举报
写的好详细,赞一个
回复 使用道具 举报
DUKEMAN 来自手机 中级黑马 2015-8-4 13:12:31
7#
青春是你的烟火,解答确实耐心细致,确实要注意变量在内存中的位置,运算符的优先顺序和用法意义。
回复 使用道具 举报
好棒好棒 .....
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马