zoukankan      html  css  js  c++  java
  • ++a和a++专题 (转自suningin)

    这个方向的题目一直是我suningin个人的一块心病,知道好久了,但是从来没有安心下来彻底研究研究,今天晚上用了些时间终于给弄了出来,放在这里和大家分享,呵呵。。。

    大家先来看看下面计算式子的值,试试自己来做做

     int b=0,c=0,d=0,g=0,i=0;
     int a=1,e=1,f=1,h=1,j=1;


     i  = (++j) + (j++) + (j++);
     g = (h++) + (h++) + (++h);
     b = (a++) + (a++) + (a++);
     c = (e++) + (++e) + (e++);
     d = (++f) + (++f) + (++f);

    你的结果是什么?

    ============================

    ==

    ==

    ==

    ==

    ==

    ==

    ============================

    如果是 6,4,3,6,10的话那么你就不用再往下看了,这道题目不会是你笔试的障碍。。。

    如果不是,那么suningin详解系列将为你解决!

    首先我们来分析一下加法的预算符“+”在c中它的是双目运算符结合方向是自左向右。也就是说要至少有两个变量才起作用,它们的结合顺序是从左到右。用 A+B+C来说明,如果要得到表达式的结果,就要从左到右执行表达式,先运算左边的+,再运算右边的+。第一个+要执行,就要先确定A,再确定B,然后才相加得到结果;用这个结果作为第二个+的左值,然后确定c,然后相加得到最后的结果。

    分步骤来表述上面的过程:拿 c = (e++) + (++e) + (e++)为例子

    1。确定第一个+左值A:(e++)为1;

    2。确定第一个+右值B:(++e)为2,因为得到的数字都是存储在变量e这个存储空间中,这时A也变为2;

    3。确定第二个+左值A+B:(e++) + (++e)为4;

    4。确定第二个+右值C:(e++)因为这个(e++)还是从变量e存储空间中取值,所以C为2;

    5。确定最后的值:(e++) + (++e) + (e++)为4+2,最后为6。

    同理大家可以自己再来计算一下其他表达式的值,看看这回的结果是否正确。这里要强的一点就是如e++这里的++的执行时间式是:当整个表达式结束的时候,也就是当c=(e++)+(++e)+(e
    ++)已经得到c=6;后才执行,也就是当开始计算d=(++f)+(++f)+(++f);时候这时e=4。

    如果大家已经理解了这个算法我们来做个联系看看suningin的讲解你有没有学会,呵呵..

    int a=1,b=0;

    b = (a++)+(++a)+(a++)+(++a);

    int a =1, b =0;

    b = (++a)+(++a)+(++a)+(a++);

    ====================================

    ==

    ==

    ==

    ==

    ==

    ===

    ===

    ===

    ===

    ====

    ====

    ====

    ====

    ==================================

    答案分别是:(2+2+2+3)=9,(3+3+4+4)=14。怎么样你做对了么。。。

    我们再来一道:

    int a =1, b =0;

    b = (a++)+(++a)+(++a)+(a++);

    ==================================

    ==

    ==

    ==================================

    没错是(2+2+3+3)=10。。。。

    在找资料中无意看到他的blog,发现好东西不少。当然这道题目似乎还有点争议,可能是编译器的问题吧

    suningin的blog是http://hi.baidu.com/suningin

  • 相关阅读:
    ajax专题
    luogu P1346 电车 最短路
    luogu P1462 通往奥格瑞玛的道路 最短路
    luogu P1328 生活大爆炸版石头剪刀布
    luogu P1315 联合权值 枚举
    luogu P1156 垃圾陷阱 背包问题
    luogu P1217 回文质数 枚举
    luogu P3650 滑雪课程设计 枚举
    luogu1209 修理牛棚 贪心
    luogu P1223 排队接水 贪心
  • 原文地址:https://www.cnblogs.com/smileallen/p/3391594.html
Copyright © 2011-2022 走看看