我想问一个简单的问题。我提供了一个非常简单的计算示例,我收到的结果与我的预期不同。有人可以解释我做错了哪一步吗?public static void main(String[] args) { int x =1; int y = 101; int a = 2; int z = ++y + y * a << 3 *2 * ++x + (x+=2); /* Step 1 int z = ++y + y * a << 3 *2 * ++x + (3); Step 2 int z = 102 + 102 * 2 << 3 *2 * 4 + (3); Step 3 int z = 102 + 204 << 24 + (3); Step 4 int z = 306 << 27; Expected:41,070,624,768 */ System.out.println(z); //Actual: 20,054,016 }
1 回答

慕的地8271018
TA贡献1796条经验 获得超4个赞
位移运算符的优先级低于加法运算符,加法运算符的优先级低于乘法运算符,乘法运算符的优先级低于递增/递减运算符。另请注意,变量是从左到右评估的,而不管它们之间的运算符的优先级如何。
int z = ++y + y * a << 3 *2 * ++x + (x+=2);
首先,做增量。
102 + 102 * 2 << 3 * 2 * 2 + 4
接下来,做乘法。
102 + 204 << 12 + 4
然后做加法。
306 << 16
位移导致20054016
.
看起来你在评估x
最右边的表达式时犯了错误。
添加回答
举报
0/150
提交
取消