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