黑马程序员技术交流社区

标题: 关于优先级和自增运算符 [打印本页]

作者: 李君言    时间: 2013-4-21 23:47
标题: 关于优先级和自增运算符
本帖最后由 李君言 于 2013-4-22 11:47 编辑

代码:
            int a = 5;
            a = a++ - 5;
            Console.WriteLine(a );

a = a++ - 5; // 我的理解 先算a-5 然后a++ 最好赋值给a ,这时a应该为1   -----    但是最后输出的是0
是不是我的优先级没整对
         
            int a = 5;
            a = ++a - 5;    // 这个时候结果就是 1  
            Console.WriteLine(a );

a++和++a 后加和前加, 是在什么时候后加和前加
还望各位指点,谢谢!
作者: wangyougu010    时间: 2013-4-22 00:02
先加:取值运算前先加1,再用新值去做运算
后加:先做运算,再加1
作者: wangyougu010    时间: 2013-4-22 00:15
wangyougu010 发表于 2013-4-22 00:02
先加:取值运算前先加1,再用新值去做运算
后加:先做运算,再加1

a = a++ -5是先取5做减运算,然后把0赋给a输出,之后a再加1,你可以在这条语句后面再输出一次a,结果就是6,即a自增1后的结果
作者: 李君言    时间: 2013-4-22 00:31
a = a++ -5  也就是说 这个时候 先是运行“ = ” 后 才“ ++”?
作者: 张林杰    时间: 2013-4-22 01:17
你看看能不能这样理解:
  1.    int a = 5;
  2.             a = a++ - 5;
  3.             Console.WriteLine(a);
  4.             等价于下面代码
  5.             int a = 5;
  6.             int b= a++ - 5;//其中先a-5,则b=0,a再自加,a=6
  7.             a = b;  //b赋值给a,则a=0
  8.             Console.WriteLine(a);//输出0
复制代码
也就是说a++先执行表达式,执行的只是a++ -5,不包括 = ,即a执行表达式(a-5)后,表达式的值为0(还未进行赋值操作),a仍然为5,然后a自加,a=6,最后把表达式的值赋值给a,表达式的值为0,所以a=0
作者: 李广水    时间: 2013-4-22 01:42
本帖最后由 李广水 于 2013-4-22 01:43 编辑
  1.        int a = 5;
  2.        a = a++ - 5;
  3.           //第一步: 先计算a-5的值等于0(这时  a=5);
  4.           //第二步:把a 自增1,a=a+1=6;
  5.           //第三步:把第一步计算的结果0赋值a , 所以这时a 内存空间存的是0;
  6.        Console.WriteLine(a );
  7.          //..................................................
  8.             int a = 5;
  9.             a = ++a - 5;   
  10.           //第一步:先运行++a,a自增1这时a=6;
  11.           //第二步:运用第一步的a值减去5得1;
  12.           //第三步把1赋值给a ,所以 这时 a 内存空间存的是1;
  13.             Console.WriteLine(a );
复制代码

作者: 熊鑫    时间: 2013-4-22 11:00
楼上有正确答案了。我在给你贴一个运算符的优先级。希望可以帮到你http://www.slyar.com/blog/c-operator-priority.html
作者: 林东枫    时间: 2013-4-22 11:09
我用下自己的思维语言帮你描述一下他们的区别:
       ++a; 是在执行该条语句时,先执行a自增1,后才执行该表达式的运算;
       a++;    是在执行该条语句的表达式结束后,a才自增1;

希望对你有帮助;
作者: 李君言    时间: 2013-4-22 11:46
张林杰 发表于 2013-4-22 01:17
你看看能不能这样理解:也就是说a++先执行表达式,执行的只是a++ -5,不包括 = ,即a执行表达式(a-5)后,表 ...

看到你这段代码我大概理解了,谢谢!

我错误的理解成:a=a++ -5 是:a-5这个时候a就等于0了,那么a++就是0+1了,最后赋值给a也就是1

其实是:a-5确实是0,但是还没有将0赋值给a,那么在运行a++时,a的值还是5




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