我想问一些简单的事情。
我提供了一个非常简单的计算示例,但我收到的结果与我的预期不同。 有人可以解释一下我哪一步做错了吗?
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
}
最佳答案
bit-shift operators其优先级低于加法运算符,加法运算符的优先级低于乘法运算符,乘法运算符的优先级低于递增/递减运算符。另请注意,变量是从左到右计算的,无论它们之间的运算符的优先级如何。
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
的表达式时犯了错误。
关于java - Java 运算符优先级到底是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55939596/