遇到a++和a--混合使用的时候,总是与结果对应不上
int a=2,b;
b=(++a)+(a--)-(++a)+(a--);
cout<<a<<" "<<b;
运算过程我是这样计算的,大家能帮忙看看么
先算++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 ,不太明白。
中途换了好多数据,例如下面程序与截图显示的效果
这个运算过程具体该怎么办呢?
我这里运行了是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
前几步都对 最后一步加了()了 应该是 b = 3 + 3 - 3 + 2=5
你用的什么IDE环境,感觉和编辑器有关,我在mac上用的clang,结果是6
你的推理是正确的
++a的值为原来的a+1
--a的值为原来的a-1
a++和a--的值都是原来的a
上述操作中,a的新值总是会变化的。