sinmz 2022-08-29 16:46 采纳率: 66.7%
浏览 47
已结题

a++和a--混合使用运算法则

遇到a++和a--混合使用的时候,总是与结果对应不上

int a=2,b;    
b=(++a)+(a--)-(++a)+(a--);
cout<<a<<" "<<b;

img

运算过程我是这样计算的,大家能帮忙看看么
先算++a:b = 3 + (a--)- (++a)+ (a--); a的值为3;
再算a--: b = 3 + 3 - (++a) + (a--); a的值为2;
再算++a: b = 3 + 3 - 3 +(a--); a的值为3;
最后算a--: b = 3 + 3 - 3 + 3 ; a的值最终为2;
b的计算结果最终应该为 6的,怎么输出显示的是 5 ,不太明白。

中途换了好多数据,例如下面程序与截图显示的效果

img

img

img

这个运算过程具体该怎么办呢?

  • 写回答

5条回答 默认 最新

  • 今夕何夕2112 2022-08-29 17:37
    关注

    我这里运行了是2 6,第一种是对的,可能是编译器“优化”出问题了。换个环境应该会正常比如devc++换codeblocks等。
    也可以试试看汇编g++ code.cpp -S -o code.s
    加上 -S 查看汇编,也可以再加上-O2或-O3优化汇编,
    看看这几个汇编文件里是怎么算的
    比如我这里(这是手机的

     行号  汇编语言
       18   mov w8, #2
      19     str w8, [sp, #8]
      20     ldr w8, [sp, #8]
      21     add w8, w8, #1
      22     str w8, [sp, #8]
      23     ldr w9, [sp, #8]
      24     subs    w10, w9, #1
      25     str w10, [sp, #8]
      26     add w8, w8, w9                                                                                     27     ldr w9, [sp, #8]
      28     add w9, w9, #1                                                                                     29     str w9, [sp, #8]
      30     subs    w8, w8, w9
      31     ldr w9, [sp, #8]
      32     subs    w10, w9, #1                                                                                33     str w10, [sp, #8]
      34     add w8, w8, w9                                                                                     35     str w8, [sp, #4]
    

    用到了三个寄存器w8,w9,w10,sp+#4存b,sp+#8存a

    img


    计算完后,把sp+#8和sp+#4依次输出就是a,b了
    2 6

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

报告相同问题?

问题事件

  • 系统已结题 9月7日
  • 已采纳回答 8月30日
  • 创建了问题 8月29日

悬赏问题

  • ¥15 关于logstash转发日志时发生的部分内容丢失问题
  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?