位运算符(& | ^ ~)的优先级是什么?

3
我假设在 Java 中所有按位运算符都具有相同的优先级。但实际上,按位运算符 AND (&) 的优先级高于按位运算符 OR (|)。请参见以下程序:

public class 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 (^)具有更高的优先级。有人能解释一下为什么根据上面的结果XOR (^)比OR (|)具有更高的优先级吗?他们如何定义优先级?


http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html - Reinstate Monica -- notmaynard
感谢您的回答。 - LearnFromGenius
1
位运算的优先级非常反直觉,因此您应该始终使用括号。 - starblue
@starblue 这是一个很好的通用实践。我发现在任何中等复杂的操作中,括号都可以加速理解,即使情况并不太模糊。传统的数学符号表示法以将所有内容挤在一起而闻名,特别是由于运算符通常是隐含的,因此对于像 2a√b/c3x+y^z4-5 这样的事物会被省略。另外,如前所述,优先级可能会因语言和上下文而异。 - Beejor
顺便提一下,这个优先级很可能是从C语言继承而来的:https://en.cppreference.com/w/c/language/operator_precedence - starblue
2个回答

1

1
在Java中,按位运算符的优先级由Java规范定义而不同:
这些[按位]运算符具有不同的优先级,其中&具有最高优先级,|具有最低优先级。
因此,&在^之前,^在|之前。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接