【发布时间】:2013-11-19 23:10:17
【问题描述】:
我会假设在 java 中所有的位运算符都有相同的优先级。然而事实上,按位运算符 AND (&) 比按位运算符 OR (|) 具有更高的优先级。请看下面的程序:
公共类 HelloWorld {
public static void main(String[] args) {
int a = 1 | 2 ^ 3 & 5;
int b = ((1 | 2) ^ 3) & 5;
int c = 1 | (2 ^ (3 & 5));
System.out.print(a + "," + b + "," + c);
}
}
上述程序的结果是3,0,3。 所以也证明异或(^)具有更高的优先级。有人可以根据上述结果解释一下为什么 XOR (^) 的优先级高于 OR (|) 吗?他们如何定义优先级?
【问题讨论】:
-
感谢您的回答
-
位运算的优先级非常违反直觉,因此您应该始终使用括号。
-
@starblue 一般来说,这是一个很好的做法。我发现在任何中等复杂的操作中,即使案例不是太模棱两可,括号也能加快理解速度。传统的数学符号因将所有内容混在一起而臭名昭著,尤其是因为运算符通常是隐含的,因此对于
2a√b/c3x+y^z4-5之类的东西会被省略。另外,如上所述,优先级可能因语言和上下文而异。 -
顺便说一句,优先级很可能继承自 C:en.cppreference.com/w/c/language/operator_precedence
标签: java bit-manipulation operator-precedence