腹黑老公溺宠:老婆别躲:详细的讲讲++a和a++在计算表达式里面的使用

来源:百度文库 编辑:九乡新闻网 时间:2024/04/30 17:33:15
* 使用我刚碰到的两个例子:int a=1,b=2;求++a+a++/--b和++b+a+++b的值
    *
    * 先说明下: a+++++b+c:这样的表达式是不合法的。a++-++b+c是合法的
    *
    * 先说++b+a+++b:
    * 不要纳闷到底是a++还是++b,因为编译阶段的代码扫描是从左到右扫描的,所以是先扫描的a++,
    * 然后才扫描到+b,所以这个就简单了(++b)+(a++)+b,按照运算的规则,a++和++a都能使a
    * 自增,但是用到运算表达式里面,就会出现什么时候自增(自减)的问题,++和--
    * 本身是按照从右到左的顺序计算的,所以,a++你可以理解为先扫描到a,那么先算a,
    * ,等a忙完了在回来自增;++a你可以理解为先看到++,那么先自增再说.这样这个表达式就好
    * 说明了等价于(3)+(1)+3,计算完毕后,a=2,b=3
    *
     *
    * ++a+a++/--b:
    * 其实这个算术表达式并没有像我们想的那样,先算乘除再算加减,她的计算过程是这样的:
    * 先将表达式按块分成两份:(++a)+((a++)/(--b)),她先算了第一个括号里面的值:++a;
    * 按照从右向左的运算顺序,结果 第一个括号的值变为2,同时a也自增为2,然后计算后面的
    * 最外括弧:她这样分析,由于++,--的优先级高于/*,所以先算++,--,但是++,--又是按照
    * 从右向左的运算顺序,所以a++没有在计算/之前自增,--b使b自减,结果成了下面的情况:
    * (2)+((2)/(1)),想必已经可以计算出结果了,运算结束:a=3(不要问我怎么成3了),b=1
    *
    */