黑马程序员技术交流社区

标题: 求助:关于a++与++a参与运算的区别及在内存中的引用 [打印本页]

作者: 彭超华    时间: 2012-6-14 11:51
标题: 求助:关于a++与++a参与运算的区别及在内存中的引用
--a   书上解释是:当递增或递减运算符放在其运算数前面,java会在获得该运算数的值之前执行相应的操作,并将其用于表达式的其他部分,(为先运算再赋值)
a--  解释是:当运算符放在运算数的后面,java会先获取该操作数的值再执行递增或递减运算(先赋值再运算)
int a=3;
(a--)<<a;
(--a)<<a;
(a++)++
(++a)++能帮忙解释下a的值在运算中的变化吗?
作者: 刘克方    时间: 2012-6-14 12:09
本帖最后由 刘克方 于 2012-6-14 12:30 编辑

a++具体解释:
int a=2;

System.out.println(a++);//此处的打印结果为2,也就是说a+1后的结果还没有赋给a;
System.out.println(a);//此处的打印结果为3,也就是说a+1后的结果赋给了a;
总结:a++运算并没有立即将a+1后的结果赋给a;a此时还是原来的值;
      在执行过a++这句代码后,才将a+1的值赋给a;

++a具体解释:     
int a=2;
System.out.println(++a);//此处的打印结果为3,表示在执行过++a时,即刻将a+1的值赋给a;

作者: 张_涛    时间: 2012-6-14 12:11
其实,根据解释,已经很明确了。
++a与a++的区别就是先让a加1然后使用a和先使用a然后让a加1
如果你不清楚,像这种问题,先思考,然后程序运行一下就明白了。
作者: 刘春发    时间: 2012-6-14 12:21
int a=3;
(a--)<<a;//<<左边a-- 后减先使用a=3  然后a自减1 a=2 所以<<右边为2
(--a)<<a;//上面运算完成后a=2, --a 先自减1 即a=1 所以<<两边都为1

(a++)++和(++a)++应该是错误的吧!()内的是运算式,不能用作++的参数
作者: 杨海波    时间: 2012-6-14 12:33
我的总结:
java中的运算符有这几种:
算术运算符:+ - * / % 分别是加减乘除求余
比较运算符:<  ,> ,<=, >= ,==, !=分别是小于, 大于, 小于等于,大于等于,不等于
逻辑运算符:或(||) 与(&&) 非(!)
赋值运算符:
+= 把变量加上右侧的值然后再赋值给自身
-= 把变量减去右侧的值然后再赋值给自身
这是常用的,应该还有%=但不常用。

位运算符:
++  递增
--  递减

条件运算符
条件?值1:值2

等等 应该还有比如<<和>>就相当于乘以或除以2的次幂。

结合你的题目:
(a--)<<a;a先乘以2的a次方a再自减1。
(--a)<<a;a先自减一再乘以2的a次方(这里的a是自减了之后的a)
(a++)++;a最后等于a+2
(++a)++;a最后等于a+2

但是如果这种情况b=(a++)++;
b=a+1了 ++在后面是要先赋值在自增的。

同学希望对你有帮助。
作者: 李伟    时间: 2012-6-14 12:36
int a=3;
(a--)<<a;//a--,先把3赋值给a--,然后a再自减1变成2,这时(a--)<<a,就是把3<<2,但是最后这个动作并没有改变a的值,a等于2.
(--a)<<a;//--a,a先自减1变成1,,再把a赋值给--a,则--a=1,这时(--a)<<a,就是把1<<1,最后这个动作没有改变a的值,a等于1.
(a++)++//a++就是先把a的值1赋给a++,然后a再自加1变成2,这时(a++)++,意思是先把a++的值1赋给(a++)++,然后a++再自加1变成2,最后这个动作
             没有改变a的值,a等于2.
(++a)++//++a就是先把a的值自加1变成3,然后再赋给++a,则++a=3,这时(++a)++,意思是先把++a的值3赋给(++a)++,然后++a再自加1变成4,最后这个
            动作没有改变a的值,a等于3.

作者: 胡卿    时间: 2012-6-14 12:57
int a=3;//先把3赋值给a,
(a--)<<a;//a--,a先左移3个单位,3乘2的3次方变成24,然后a再自减1变成23,
(--a)<<a;//--a,a先自减1变成2,再左移3个单位,2乘2的3次方变成16,
(a++)++//a++,a自增两次为5.
(++a)++//++a,a自增两次为5.

作者: 郑冬    时间: 2012-6-14 13:05
int a=3;
(a--)<<a;
(--a)<<a;这几个都很简单,按照解释就可以
(a++)++,(++a)++这两个是有问题的,因为++和--运算符中是不能出现常数或表达式的
作者: 位雪    时间: 2012-6-14 13:16
++a:a自增一后参与运算  
a++:a参与运算后自增一
--a:a自减一后参与运算
a--:a参与运算后自减一
(a--)<<a:a左移a个单位后,a值减一参与下次运算  
(--a)<<a:a值减一后左移a个单位

作者: 彭超华    时间: 2012-6-14 19:39
假设int a=2;
     int x;
x=(++a)+(++a)+(++a);
变量a初始化在内存中的值为2,算术运算的顺序是从左往右,第一个++a后,a在内存中的值为3,再把3同时赋值给第二和第三个++a,然后开始第二个++a计算后,a的值变4再赋值给第三个++a,最后求和运算,这样理解没问题吧!





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