请问这种x++和++x的混合运算到底是怎么算的
为什么如图输出结果为8呢?
++x运算优先级最高,然后运算+,最后再自加(x++)。
++x,这个意思就是先对x进行加一,然后参与其他运算,x++就是先运算,运算完后再对x++。
所以先算加加x,使得x=2,然后三个2相加它们为6。
还有两个x++,加上就是8。
有帮助的话采纳一下哦!
++x先加1,使x=2,3个x相加就是6。然后厂办两次x加1,最终为8
记住++x先加后运算,x++先运算后加
======
x = (x++) + (++x) + (x++);
转换一下相当于以下四行代码:
x = x+1; //先执行++x,使得x变为2
x = x+x+x; //3个2相加,x=6
x = x+1;
x = x+1; //然后两次x++的x加上1,x=8
最终x值为8
你的代码用C++在GCC上编译不过,按你题干说的C语言,我这执行结果为7
x++ 1 x=2
++x 3 x=3
x++ 3 x=4
1+3+3=7
对不?
不同编译软件运行结果可能不一样,不用纠结这个,知道i++,++i有什么区别就行了
未定义行为,不同编译器运行结果不一样,有的结果是7。
VS是先括号两个x++,记两次+1,然后++x,x=2,再2+2+2=6,然后补上前面两次6+1+1=8
你觉得会是什么?
主要原因是写回内存的时机不同。运算是在cpu内进行的,计算完一次后,不同编译器写回内存的时机不一样。
vs下前置++一次就会这回内存。
先前置++,写回内存,i=2,在3个加起来得6,最后在后置++,得到8。
在linux下,执行 (++i)+(++i)+(++i)得到的结果是10
前两个自增后,写回内存i=3,然后相加得6,
在自增i=4,相加得10。
vs下执行相同代码,结果为12,前置++先执行完,写回内存i=4,然后三个在相加得到12。