qq_31488279
匿名内部类
采纳率50%
2017-10-10 04:33

关于c语言的运算顺序。

已采纳

今天老师讲作业,碰到下图第八题,按照老师的说法,++运算符的优先级大于关系运算符和逻辑运算符,所以这题的答案是a=4,b=6。但是我记得自己写过这个程序,结果并不是这样,然后又写了一次,如下图34。
依旧和老师讲的不一样,但是翻了书,后面的优先级确实是算数运算符大于&&运算符。
我想的是,&&运算符和||运算符都是先算左边再算右边,&&运算符算出左边为假就不会继续运算,后面的++a也就不执行,||同理。但是这样想就和书后面的运算顺序还有老师的说法矛盾了,&&运算符的优先级很低,所以求助大佬,这个该怎么理解。图片图片图片图片

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 4年前
     int a=3;
    int b=5;
    a>b&&++a; //a>b不满足,所以++a不执行
    a<b||++b; //a<b满足,所以++b也不执行
    printf("%d %d", a, b); //所以还是3 5
    和优先级没关系,你可以认为,条件表达式优化,导致部分表达式不求值,这个比任何优先级都高
    上机验证
    3 5
    https://ideone.com/jMSAyH
    
    点赞 4 评论 复制链接分享
  • zhongqizhi JamesErshou 4年前

    我以前也很纠结这样的问题,很想搞明白,其实没必要。
    这就是让你深入理解运算符优先级而已,假设你不想记,那么用小括号把想有限处理的东西括起来
    不论如何,小括号优先级最高,逻辑清晰
    像这样的各种运算符拥挤到一起的代码在实际工作中非常不建议如此写

    点赞 评论 复制链接分享
  • qq_38204686 das白 4年前
    点赞 评论 复制链接分享
  • u011370611 uoc超哥 4年前

    你老师说的应该是这种的情况吧a=4,b=3;a==++b;的这种情况

    点赞 评论 复制链接分享