【问题标题】:What is the precedence for bitwise operators (& | ^ ~)位运算符的优先级是什么(& | ^ ~)
【发布时间】: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


【解决方案1】:

因为& 被定义为比^ 具有更高的优先级,而^ 被定义为比| 具有更高的优先级。

Look at oracle's java tutorial.

【讨论】:

    【解决方案2】:

    在 Java 中,按位运算符具有 Java 规范定义的不同优先级:

    这些 [bitwise] 运算符具有不同的优先级,其中 & 具有最高的 优先级和 |最低优先级。

    所以&^ 之前,^| 之前。

    【讨论】:

      猜你喜欢
      • 2011-10-25
      • 2018-06-21
      • 1970-01-01
      • 2017-10-13
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多