• ++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

  • 相关阅读:
    python爬虫 --- 简书评论
    python 爬虫 伪装
    pygal的简单使用
    anaconda安装不存在的包
    python爬虫 赶集网
    my.conf 修改编码
    python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删改查操作
    基于visual Studio2013解决C语言竞赛题之1021九九乘法表
    基于visual Studio2013解决C语言竞赛题之1020订票
    基于visual Studio2013解决C语言竞赛题之1019填数
  • 原文地址:https://www.cnblogs.com/smileallen/p/3391594.html
Copyright © 2020-2023  润新知