黑马程序员技术交流社区

标题: a++与++a的区别 [打印本页]

作者: 李会成    时间: 2013-1-26 14:49
标题: a++与++a的区别
本帖最后由 李会成 于 2013-2-18 11:41 编辑


int a=3;
(a--)<<a;
(--a)<<a;
(a++)++
(++a)++能帮忙解释下a的值在运算中的变化吗?
作者: 祁振朋    时间: 2013-1-26 15:53
a++是先把a拿走运算,然后再++。++a是反过来,先++,再用++ 后的结果算。
(a--)<<a    3<<3  结果是24,再--,结果是23  
(--a)<<a    2<<3  结果是16
(a++)++   结果是5
(++a)++  先算里面,再算外面,结果是5

在内存中是有一个临时变量存放a的数值

好像是这样的。
作者: 洪建超    时间: 2013-1-26 16:07
java 运算符优先计算顺序(由高到低)
--------------------------------------------------------------------------------
                      运算符类型                               运算符
--------------------------------------------------------------------------------
               Unary: 一元                                 +- ++ -[其余的]
               Arithmetic(shift);算术(和移位)       * / % + - << >>
               Relational:关系                            > < >= <= == !=
               Logical(bitwise):逻辑(和按位)       && || & / ^
               Conditional(ternary:条件(三元)     A>B?X:Y
               Assignment: 赋值                        =(以及复合赋值,如*=)
--------------------------------------------------------------------------------
>> 右移 

>>> 右移,左边空出的位以0填充 
<< 左移



作者: 王国伟.    时间: 2013-1-26 16:50
本帖最后由 王国伟. 于 2013-1-26 16:59 编辑

给你举个简单的例子吧
当a++或是++a单独出现时,a都是做自增加1运算,++放在前面或是后面结果是一样的。
所以
(a++)++或是(++a)++的结果是一样的。
当a++或是++a在给一个变量做赋值时:比如
int a=1;
y=a++;就是先把a的值赋给y在做自增加1,输出结果就是a=2,y=1
y=++a;就是a先做自增加1在赋值给y,输出结果为a=2,y=2
作者: 黄金龙    时间: 2013-1-26 17:24
  1.                 int a=3;
  2.                 sop((a--)<<a); //这里是3 <<2  前面的A没变,减了1后面的就得到了这个值 所以是12
  3.                 a=3;
  4.                 sop((--a)<<a); // 这里是2 << 2 前面的A减了1才给后面的  所以结果是8
  5.                 a=3;
  6.                 sop(a++);你那个就相当于这样 先赋值后加 所以是结果3  但是值是4了..
  7.                 sop(a++);你那个就相当于这样 先赋值后加 所以是结果4  但是值是5了..

  8.                 a=3;
  9.                 sop(++a);你那个就相当于这样 先加后赋值 所以是结果4  值是4..

  10.                 sop(a++);你那个就相当于这样 先赋值后加 所以是结果4 但是值是5了..
复制代码

未命名.jpg (2.44 KB, 下载次数: 40)

未命名.jpg

作者: 逍林游    时间: 2013-1-26 18:37
这涉及运算符优先级问题:自增++运算符优先级大于移位运算符,把括号去掉也没关系,结果一样!
作者: dzr19850306    时间: 2013-1-27 09:10
int a=3;
(a--)<<a;  //  a-- 之后再做位移运算,是以2还是3呢。这个真不懂。  
(--a)<<a;
(a++)++
(++a)++能帮忙解释下a的值在运算中的变化吗?
作者: 李培根    时间: 2013-2-18 11:41
请勿复制他人帖子,技术分不是入学的门槛而是为了帮助大家学习而存在的。

请勿再次发此类帖子了!

此贴就关闭了。此后如有再次发现直接封禁处理,请看到此贴的会员也加以注意。





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