c巴拉巴拉 2024-03-12 20:38 采纳率: 87.5%
浏览 5
已结题

运算符优先级为什么不对啊

int a=6 b=4
++a+b%a+++b的结果是?
7 7%5 5
17
运算符优先级为什么不对啊

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-12 20:38
    关注

    引自免费微信小程序:皆我百晓生

    首先,我们来分析一下表达式 ++a+b%a+++b 在 C 语言中的运算过程和优先级规则。根据 C 语言的运算符优先级,自增(++)运算符的优先级高于算术运算符 %+,而同级运算符从左到右结合。

    1. 首先,由于 ++ 是前置自增运算符,所以它会先使变量 a 的值加 1,这时 a 的值变为 7。
    2. 接着计算 b % a,即 4 % 7 结果为 4。
    3. 然后是另一个 ++ 运算符,但此处它是后置自增运算符,它会在表达式求值后使变量 b 的值加 1,因此当前 b 的值仍为 4。
    4. 最后,将前面计算得到的结果进行加法操作:(++a) 即 7 与 (b%a) 即 4 相加,得到 11。
    5. 此时由于后置自增的存在,最后还需要加上原 b 的值 4,但是这里的 +++b 中的前两个 + 实际上是与 b 相邻的一个误输入,正常应该是 +b,这里我们就忽略这个错误并按照实际意图处理,即加上 4。

    综上所述,正确的计算步骤应当是:

    (++a) + (b % a) + b
    = 7 + 4 + 4
    = 15
    

    但由于原始表达式中存在一个可能是笔误的连续 +++b,导致了混淆。实际上在编译器中该表达式可能无法正确解析或编译通过。若假设此处确实有误,并将其理解为后置自增,那么结果应为 15,而非 17。在实际编程中,请务必确保表达式的正确性以避免此类问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月13日
  • 已采纳回答 4月5日
  • 创建了问题 3月12日

悬赏问题

  • ¥20 Github上传代码没有contribution和activity记录
  • ¥20 SNETCracker
  • ¥15 数学建模大赛交通流量控制
  • ¥15 为什么我安装了open3d但是在调用的时候没有报错但是什么都没有发生呢
  • ¥50 paddleocr最下面一行似乎无法识别
  • ¥15 求某类社交网络数据集
  • ¥15 靶向捕获探针方法/参考文献
  • ¥15 很抱歉出现错误word不能启动(24),如何解决?
  • ¥15 javascript下载网络图片
  • ¥15 excel中的填充效果 对应poi的哪个对象啊