黑马程序员技术交流社区
标题:
看似很简单的运算题,结果却不在我意料中,求助,谢谢了
[打印本页]
作者:
瞿正峰
时间:
2012-9-14 23:37
标题:
看似很简单的运算题,结果却不在我意料中,求助,谢谢了
int number = 100;
int num = number-- + number++;
Console.WriteLine(num);
Console.ReadKey();
我认为num的值是200
可以怎么运算调试都是199
瞬间石化了,求解释啊,谢谢各位
作者:
彭书雄
时间:
2012-9-15 06:02
按照运算符的运算规则,++ -- 放在后面是 先运算后加减 所以 100 使用以后 number值为99 然后相加的值为199
如果再输出console,writeline(number) number的值为100 应为第二次使用之后自增,变成了100;
作者:
林洲
时间:
2012-9-15 08:02
问题的解决方式有很多种,如果实在绕晕了,不妨使用简单的,易于理解的;
你可以通过设置断点去调试,这方式最直接,要不也可以如下理解,
比对for循环中的:
for(i = 0,i < 100, i++)
for(i = 99,i >= 0, i- - )
作者:
黑马王建伟
时间:
2012-9-15 08:20
楼上说的都对,楼主在理解下
package j2se_develop;
public class LianXi{
public static void main(String[] args) {
int num=100;
num=
num-- // num--即100--等于99
+
num++;//此时num已变成99,再99++,就变成了100
System.out.println(num);//99+100就等于199
}
}
复制代码
作者:
李 玉林
时间:
2012-9-15 10:23
其实楼主没必要纠结这种表达式 实际中很少用到
作者:
杜峰
时间:
2012-9-15 11:37
楼上解答的都很对,多看看运算符的优先级和运算规则
作者:
刘俊红
时间:
2012-10-3 20:53
本帖最后由 刘俊红 于 2012-10-3 21:03 编辑
int number = 100;
int num = number-- + number++;
Console.WriteLine(num);
复制代码
为什么输出的是199而不是200?
这是表达式的副作用问题。
后增后减都是在参与运算后,自身再自增自减(这就是副作用)。
过程如下:
1. number--在 + 运算时,number是100
2. 在+运算后,才自减成99,也就是此时的number++中的number是99。
3. number++的副作用(自加)在整个赋值语句结束后才出现。
即是说,在第二句中,第一个number是100,
第二个number其实是99
.
当然,赋值运算结束后,number又自到100了。
瞿
同学认为number的两个++和--是在整个个赋值语句完后,才起作用。
事实上,第一个number的副作用在 +运算符 后就已经起作用了。
作者:
许波
时间:
2012-10-4 10:30
擦,作为一个新手,我觉得这题对于理解算术优先级很不错啊...
作者:
秦敖
时间:
2012-10-5 14:42
对int num=number--+number++;进行拆分:int i=number--;//先引用后自减,这句执行后i值为100,number值为99
int j=number++;//先引用后自加,这句执行后j值为上句执行后number的值99,number值为100
int num=i+j;//99+100=199
作者:
曾家伟
时间:
2012-10-7 20:28
int num = number-- + number++;//num = num
(100) + (99) = 199
先执行number--,因为是后自减,所以先取自减前的值,也就是100,然后number的值自减为99,第二部执行number++,同样是后自加,所以取99,然后number自加为100
作者:
郭会茹
时间:
2012-10-8 10:00
学习啦{:soso_e100:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2