Java:如何在按位异或运算符中评估条件? (^)

Java: How conditions are evaluated in Bitwise XOR operator ? (^)

我正在尝试评估以下内容:

  1. System.out.println(""+(3!=3 | 2==2 | 3==1)); - Returns 真
  2. System.out.println(""+(3!=3 & 2==2 & 3==1)); - Returns 错误
  3. System.out.println(""+(3!=3 ^ 2==2 ^ 3==1)); - Returns 正确 - 如何以及为什么?

我的理解:

  1. 将 return 真;基于第二次比较(2==2);但它会做所有的比较;不像 || 只做 1 次比较和 return 结果

  2. 会return假;即使它在第一次比较时得到结果(3!=3);但它会做所有的比较。不像 && 只做 1 次比较和 return 结果

  3. ?它如何评估报表?

从左到右计算:

3!=3 ^ 2==2false ^ true 这是真的。

true ^ 3==1true ^ false 这是真的。

System.out.println(""+(3!=3 | 2==2 | 3==1));
// System.out.println(""+(false | true | false));
// System.out.println(""+(    true     | false));
// System.out.println(""+(true));
System.out.println(""+(3!=3 & 2==2 & 3==1));
// System.out.println(""+(false & true & false));
// System.out.println(""+(    false    & false));
// System.out.println(""+(false));
System.out.println(""+(3!=3 ^ 2==2 ^ 3==1));
// System.out.println(""+(false ^ true ^ false));
// System.out.println(""+(    true     ^ false));
// System.out.println(""+(true));

引用JLS section 15.22.2,并且知道表达式是从左到右求值的:

For &, the result value is true if both operand values are true; otherwise, the result is false.

For ^, the result value is true if the operand values are different; otherwise, the result is false.

For |, the result value is false if both operand values are false; otherwise, the result is true.

作为旁注,正确的名称 are:

  • & 是按位与。
  • | 是按位包含或。
  • ^ 是按位异或。

XOR 是一个 "exclusive or statement"。一般如何运作: 取这 2 个二进制数:

0 0 1 1 0 1
0 1 1 0 1 1
- - - - - - XOR
0 1 0 1 1 0
如果所比较的两个布尔值中的 ONE 为真,则

XOR 只会 return 为真。

所以在布尔比较的情况下(逻辑table):

   ^  |  true | false
----------------------
true  | false | true
----------------------
false | true  | false

在您的具体情况下,这意味着:

( 3!=3  ^ 2==2   ^ 3==1)
((false ^ true)  ^ 3==1)
(       true     ^ 3==1)
(       true     ^ false)
true

它是java中的按位异或运算符,当a时,对于不同的位值(即1 ^ 0 = 1)结果为1,对于相同的位值(即0 ^ 0 = 0)结果为0数字以二进制形式写入。

首先它评估 (3!=3 ^ 2==2) 为假,然后将假(来自上一步)^ false (3==1) 评估为真。