我已经在这里提出了一个问题,但我想将其扩展为带有示例的增量char a = 'D';int b = 5;System.out.println(a++/b+--a*b++);作为该问题的答案之一是:(68 / 5) + (68 * 5) 和b ++对此没有影响。我的疑问是,如果b ++不起作用,那么为什么a ++起作用?理想情况下应该步骤1: (68/b+--a*b++);现在a = 69;第2步: (68/b+--a*5)现在a = 69; b = 6;第三步: (68/b+68*5)第四步: (68/6+68*5)回答351,但得到的答案是353
2 回答
![?](http://img1.sycdn.imooc.com/5f33c0c90001f9ad05720572-100-100.jpg)
白衣非少年
TA贡献1155条经验 获得超0个赞
不要将评估顺序与优先顺序混淆。
评估顺序指出操作数始终从左到右执行。
优先级指出*和/ 运算符在+和之前应用-,除非被括号覆盖。
所以,你说得对,a++/b+--a*b++手段(a++ / b) + (--a * b++)。这是优先事项。
由于数字运算符将值提升为int(在这种情况下),所以您也说对了,这char a = 'D'是对的int a = 68。
所以:
(a++ / b) + (--a * b++) a = 68 b = 5
(68 / b) + (--a * b++) a = 69 b = 5
(68 / 5) + (--a * b++) a = 69 b = 5
(68 / 5) + (68 * b++) a = 68 b = 5
(68 / 5) + (68 * 5 ) a = 68 b = 6
13 + 340 a = 68 b = 6
353 a = 68 b = 6
如您所见,b++确实有一个作用:执行表达式b 后的值。
![?](http://img1.sycdn.imooc.com/5458689e000115c602200220-100-100.jpg)
潇湘沐
TA贡献1816条经验 获得超6个赞
步骤4:(68/6 + 68 * 5)这是您的错!b在计算中的所有位置均为5,而不是其值6。
所以我们有:
步骤4:(68/5 + 68 * 5)=(13 + 340)= 353
添加回答
举报
0/150
提交
取消