黑马程序员技术交流社区
标题:
求这题自加运算的详细过程
[打印本页]
作者:
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
处理过程如下:
public class Test01 {
public static void main(String[] args) {
int a = 3, b;
b = (a++);
// 3
System.out.println(b);
//输出:3
//先计算表达式,然后完成自增。 此时: b = 3, a = 4
b = 0;a = 3;
b = (a++) + (++a);
// 3 + 5
System.out.println(b);
//输出:8
//先完成自增,然后计算表达式。 此时: b = 8, a = 5
b = 0;a = 3;
b = (a++) + (++a) + (a++) * 2;
// 3 + 5 + 5 * 2
System.out.println(b);
//输出:18
//先计算表达式,然后自增运算。 此时: b = 18, a = 6
b = 0;a = 3;
b = (a++) + (++a) + (a++) * 2 + a;
// 3 + 5 + 5 * 2 + 6
System.out.println(b);
//输出:24
//先计算表达式,然后自增运算。 此时: b = 18, a = 6
//直接相加
b = 0;a = 3;
b = (a++) + (++a) + (a++) * 2 + a + (++a);
// 3 + 5 + 5 * 2 6 + 7
System.out.println(b);
//输出:31
//先计算表达式,然后自增运算。 此时: b = 24, a = 7
}
}
复制代码
例子二:
int a = 4;
int b = (a++)+(++a)+(a*10)+(a++);
System.out.println("a="+a);
System.out.println("b="+b);
输出结果:a = 7, b = 76
处理过程如下:
public class Test02 {
public static void main(String[] args) {
int a = 4;
int b = (a++);
// 4
System.out.println("a=" + a + ",b=" + b);
b = 0;
a = 4;
b = (a++) + (++a);
// 4 + 6
System.out.println("a=" + a + ",b=" + b);
b = 0;
a = 4;
b = (a++) + (++a) + (a * 10);
// 4 + 6 + (6 * 10)
System.out.println("a=" + a + ",b=" + b);
b = 0;
a = 4;
b = (a++) + (++a) + (a * 10) + (a++);
// 4 + 6 + (6 *10) + 6
//最后一次运算:(a++),先参与运算,把结果赋值到b, 然后才是++
//例如:
//int a = 1;
// b = (a++);
// b = 1;与有无括号没有关系
// 计算完表达式,之后a就++了,这样a 就是 a = 7
System.out.println("a=" + a + ",b=" + b);
}
}
复制代码
希望可以帮助到你。
作者:
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