Java:如何在按位异或运算符中评估条件? (^)
Java: How conditions are evaluated in Bitwise XOR operator ? (^)
我正在尝试评估以下内容:
System.out.println(""+(3!=3 | 2==2 | 3==1));
- Returns 真
System.out.println(""+(3!=3 & 2==2 & 3==1));
- Returns 错误
System.out.println(""+(3!=3 ^ 2==2 ^ 3==1));
- Returns 正确 - 如何以及为什么?
我的理解:
将 return 真;基于第二次比较(2==2
);但它会做所有的比较;不像 ||
只做 1 次比较和 return 结果
会return假;即使它在第一次比较时得到结果(3!=3
);但它会做所有的比较。不像 &&
只做 1 次比较和 return 结果
- ?它如何评估报表?
从左到右计算:
3!=3 ^ 2==2
是 false ^ true
这是真的。
true ^ 3==1
是 true ^ 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) 评估为真。
我正在尝试评估以下内容:
System.out.println(""+(3!=3 | 2==2 | 3==1));
- Returns 真System.out.println(""+(3!=3 & 2==2 & 3==1));
- Returns 错误System.out.println(""+(3!=3 ^ 2==2 ^ 3==1));
- Returns 正确 - 如何以及为什么?
我的理解:
将 return 真;基于第二次比较(
2==2
);但它会做所有的比较;不像||
只做 1 次比较和 return 结果会return假;即使它在第一次比较时得到结果(
3!=3
);但它会做所有的比较。不像&&
只做 1 次比较和 return 结果- ?它如何评估报表?
从左到右计算:
3!=3 ^ 2==2
是 false ^ true
这是真的。
true ^ 3==1
是 true ^ 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 istrue
if both operand values aretrue
; otherwise, the result isfalse
.For
^
, the result value istrue
if the operand values are different; otherwise, the result isfalse
.For
|
, the result value isfalse
if both operand values arefalse
; otherwise, the result istrue
.
作为旁注,正确的名称 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) 评估为真。