在此代码中:
int y = 10;
int z = (++y * (y++ + 5));
我所期望的
y++ + 5
由于最里面的括号的优先级,将执行First 。因此,值y
将为11,而该表达式的值将为15。然后++y * ()
将被执行。所以12 * 15 =180。所以z = 180
我得到了什么
z = 176
这意味着VM从左到右不遵循操作员优先级。那么我对运算符优先级的理解是错误的吗?
表达式(++ y *(y ++ + 5)); 将被放置在这样的堆栈中:
1. [++y]
2. [operation: *]
3. [y++ + 5] // grouped because of the parenthesis
结果将按该顺序执行
1. 10+1 = [11] // y incremented
2. [operation: *]
3. 11+5 = [16] // y will only increment after this operation
该表达式的计算方式为
11 * 16 = 176
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句