黑马程序员技术交流社区

标题: 简单的一个运算题,绕晕了,没整明白,求助 [打印本页]

作者: 瞿正峰    时间: 2012-9-14 23:35
标题: 简单的一个运算题,绕晕了,没整明白,求助
int number = 100;           
int num = number-- + number++;
Console.WriteLine(num);
Console.ReadKey();

我觉得运算过后num的值为200,
可以怎么运算都是199...
程序也没问题,卡着睡不着了。。。
作者: iamheima    时间: 2012-9-15 00:52
我记得书中是这样描述后++(--)两个运算符的:先参与运算再自增(自减)。
你想不明白是因为你认为自增(自减)是在一条语句(分号)执行完成后再执行的,其实并不是,正如书中所说,是先参与运算!
我是这样分析的,加号左边参与运算后变成了99,而之前记录下来了100将与右边的数再做加法操作,所以结果为199。

作者: 杨千里    时间: 2012-9-15 01:30
number-- + number++
        number--    后的值 99,      
                99+99++           198+1                      199
作者: 廖创发    时间: 2012-9-15 01:39
刚开始看的时候我也晕了~结果查MSDN,搞了大半个小时才有点头绪。
我是这样想的: number-- 和 number++的优先级一样,所以先运算number--,这时number自减1,为99,然后运算number++,因为前面number--使得number的值变成99,所以这次number++的运算结果是99+1,所以sum=199
例如下面这个代码:
            int number = 100;
            Console.WriteLine(number--);
            Console.WriteLine(number++);
            Console.ReadKey();
作者: 刘欢(安阳)    时间: 2012-9-27 23:01
呵呵,有点绕人啊,number-- 和number++不是同时进行的,number-- 的确是100,但是之后number自减,其值已经是99了,这时候再执行number++的话,number++的值也是99,完了自加number重新变成其实真实的执行是num = number-- + number++=100+99=199了,确实一开始我也有点小晕,挺有意思的。
碰到这种情况,建议调试下
作者: 陈顺亮    时间: 2012-9-27 23:41
199啊,number-- +number++中number--后number的值就为99了,然后number++之后number为100了 加起来就是199
其实等于int num1= number-1;  这时候num1=99;
number++等于int num2=num1+1;这时候num2=100;
最后相加就为199
作者: 蔡嘉    时间: 2012-9-28 14:28
从良好的编程习惯角度出发来看这一问题:如果程序员都这样写程序,会让程序变得不易读懂,造成很多困扰,使得团队纠缠在这样的小问题上。所以,忽然想起杨中科老师的讲课,能加括号就加括号,通俗易读懂。
作者: 郑本川    时间: 2012-9-28 19:48
这是我做的笔记。希望对你有帮助
作者: 刘进朝    时间: 2012-9-29 10:48
遇到复杂的运算可以把他们拆开来算,这样有助于理解.
作者: 邓艳秋    时间: 2012-10-2 09:59
我只说一句,一元运算符比二元运算符的优先级要高。。。
你怎么会晕。。。先减后加等于没加没减么,后面那个值和初始值一样,前面的自减1了,运行出来的当然是199了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2