C++的运算问题(高手请进!)

来源:百度知道 编辑:UC知道 时间:2024/06/23 04:57:25
What is the value of k and j if a programme with the following C/C++ code in its main function body is executed? You can write a simple programme and run it to help you get the answer. Try to explain why.

int m=9;
int n=9;
int k,j;
k=--n + --n ;
j=m+(++m-10);
cout<<endl<<k<<endl<<j<<endl<<m<<endl<<n<<endl;
知道答案,就是不知道为什么j=--n+--n;j=14
难道这两个j运算后都是7
那又为什么j=--n+--n+--n;j=20了呢?照理说三个6应该是18呀

只说一句, __int64和 pucxx解释得很清楚了,而且受益.
之后又通过验证,猜想如下:
int n=18;
int j;
j=--n+ --n;
//j=16+16=32
j=--n+ --n+ --n;
//j=15+13+13=41
j=--n+ --n+ --n+ --n;
//j=12+11+9+9=41
j==--n+ --n+ --n+ --n+ --n;
//j=8+7+6+4+4=29
j==--n+ --n+ --n+ --n+ --n+ --n;
//j=3+2+1+0+(-2)+(-2)=2;

相信大家都看出规律了吧,编译器默认将最后两个表达式的值同时取n做自减运算后的最终值,当然这只是猜测,因为没有办法“逐表达式”调试。但我相信我是对的!

前增量和后增量的问题。
从老谭开始,讨论了快 30 年了。
误人子弟。

这个先放下,等你看到 运算符 重载的时候,自己实现一下,就理解了。

本题的运行结果为:解释:对于k=--n + --n ; 一句由于--的优先级大于+的,所以要先进行两个--的运算,进行运算后n变为7,之后进行+运算,此时运算结果为14赋给k。
对于j=m+(++m-10); 一句由于优先级()>++>+,-,所以这个的运算顺序是先是进行括号内的运算,括号内先运行++后m变为10,之后括号内全部运行结果为0,而此时的m已经变为10了,所以j被赋值为10.
最后一句输出按照运行的结果进行输出结果即为:换行 14 换行 10 换行 10 换行 7 换行。
多个自加或者自减运算符连用的话,不同的编译系统的运算结果有可能是不一样的啊!

楼上的回答我怕你没看懂,还是我说吧!
k=--n + --n ;
先运算两个加数,--的级别大于+这个理解吧?
第一个--n=8,然后再--n =7;
这个时候7+7=14;
再说 j=--n+--n+--n;
先前面两个加数相加=14没疑问吧? 后面一个--n=6 所