C语言-关于赋值运算符在括号中运算产生非预期结果的探究

本文探讨了C语言中赋值运算符在括号内使用时可能产生的非预期结果,通过实例和汇编代码分析了运算顺序和赋值运算符的特性,包括+=, ++等。并提供了多种情况的比较,提醒读者深入理解运算规则并自行验证。" 81746399,6885117,Radan 7.5.18.02270:专业雷达数据分析与处理软件,"['雷达数据分析软件', 'CAD/CAM', '工程软件', '数据处理', '地质勘探']
摘要由CSDN通过智能技术生成

C语言-关于赋值运算符在括号中运算产生非预期结果的探究

起因:以下代码中,按照本人预期的理解,应该是结果为3.

int a=0;

//下式b为何为4

int b=(a+=1)+(a*=2);//4

预期:

  • 先算左式:a+=1。得到a=1,该式子的结果是1。
  • 再算右式子:a*=2。得到a=2,该式子的结果是2。
  • 最终得到的结果预期是3。

但是最终结果b是4,也验证了a最后是2,这是为什么呢?

这段代码对应的汇编程序如下:

000000000000064a <main>:
64a:   55                               push   %rbp
64b:   48 89 e5                         mov    %rsp,%rbp
64e:   48 83 ec 10                      sub    $0x10,%rsp
652:   c7 45 f8 00 00 00 00             movl   $0x0,-0x8(%rbp)
659:   83 45 f8 01                      addl   $0x1,-0x8(%rbp)
65d:   d1 65 f8                         shll   -0x8(%rbp)
660:   8b 45 f8                          mo
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值