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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李君言 中级黑马   /  2013-4-21 23:47  /  2231 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李君言 于 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 后加和前加, 是在什么时候后加和前加
还望各位指点,谢谢!

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

8 个回复

正序浏览
张林杰 发表于 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
回复 使用道具 举报
我用下自己的思维语言帮你描述一下他们的区别:
       ++a; 是在执行该条语句时,先执行a自增1,后才执行该表达式的运算;
       a++;    是在执行该条语句的表达式结束后,a才自增1;

希望对你有帮助;

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
熊鑫 中级黑马 2013-4-22 11:00:47
7#
楼上有正确答案了。我在给你贴一个运算符的优先级。希望可以帮到你http://www.slyar.com/blog/c-operator-priority.html
回复 使用道具 举报
本帖最后由 李广水 于 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 );
复制代码

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
你看看能不能这样理解:
  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

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
a = a++ -5  也就是说 这个时候 先是运行“ = ” 后 才“ ++”?
回复 使用道具 举报
wangyougu010 发表于 2013-4-22 00:02
先加:取值运算前先加1,再用新值去做运算
后加:先做运算,再加1

a = a++ -5是先取5做减运算,然后把0赋给a输出,之后a再加1,你可以在这条语句后面再输出一次a,结果就是6,即a自增1后的结果
回复 使用道具 举报
先加:取值运算前先加1,再用新值去做运算
后加:先做运算,再加1

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马