Java:如何在Bitwise XOR运算符中评估条件? (^)

时间:2015-12-03 10:00:27

标签: java bitwise-operators bitwise-xor

我试图评估以下内容:

  1. System.out.println(""+(3!=3 | 2==2 | 3==1)); - 返回TRUE
  2. System.out.println(""+(3!=3 & 2==2 & 3==1)); - 返回FALSE
  3. System.out.println(""+(3!=3 ^ 2==2 ^ 3==1)); - 返回TRUE - 如何以及为什么?
  4. 我的理解:

    1. 将返回TRUE;在第二次比较的基础上(2==2);但它会做所有的比较;不像||那样只进行1次比较并返回结果

    2. 将返回false;即使它在第一次比较期间得到结果(3!=3);但它会做所有的比较。不像&&只进行1次比较并返回结果

    3. ?它如何评估报表?

4 个答案:

答案 0 :(得分:4)

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,并知道从左到右评估表达式:

  

对于&,如果两个操作数值均为true,则结果值为true;否则,结果为false

     

对于^,如果操作数值不同,则结果值为true;否则,结果为false

     

对于|,如果两个操作数值均为false,则结果值为false;否则,结果为true

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

  • &是按位的。
  • |具有包含顺序或。
  • ^是按位排他或。

答案 1 :(得分:1)

从左到右进行评估:

9th3!=3 ^ 2==2,这是真的。

false ^ truetrue ^ 3==1,这是真的。

答案 2 :(得分:0)

XOR是"独家或声明"。一般如何工作: 取这两个二进制数:

0 0 1 1 0 1
0 1 1 0 1 1
- - - - - - XOR
0 1 0 1 1 0

如果比较的两个布尔值中的 ONE 为真,则XOR将仅返回true。

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

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

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

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

答案 3 :(得分:0)

它是java中的Bitwise xor运算符,当一个数字以二进制形式写入时,对于不同的位值(即1 ^ 0 = 1)得到1,对于相同的位值(即0 ^ 0 = 0)得到0

首先它评估(3!= 3 ^ 2 == 2),这是假的,然后是假(从上一步)^ false(3 == 1)被评估为真。