我已经在这里提出了一个问题,但我想扩展一下Post increment with example
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;
第3步:(68/b+68*5)
步骤4:(68/6+68*5)
答案351,但答案是353
答案 0 :(得分:3)
不要将evaluation order与precedence混淆。
评估顺序指出,操作数始终按从左至右执行。
优先级指出,*
和/
运算符在+
和-
之前应用,除非被括号覆盖。
因此,您说对a++/b+--a*b++
的意思是(a++ / b) + (--a * b++)
。那是优先。
由于使用了数字运算符promote values to 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
的值。
答案 1 :(得分:-1)
第4步:(68/6 + 68 * 5)这是您的错! b在计算中的所有位置均为5,而不是其值6。
所以我们有:
第4步:(68/5 + 68 * 5)=(13 + 340)= 353