我试图评估以下内容:
System.out.println(""+(3!=3 | 2==2 | 3==1));
- 返回TRUE System.out.println(""+(3!=3 & 2==2 & 3==1));
- 返回FALSE System.out.println(""+(3!=3 ^ 2==2 ^ 3==1));
- 返回TRUE - 如何以及为什么?我的理解:
将返回TRUE;在第二次比较的基础上(2==2
);但它会做所有的比较;不像||
那样只进行1次比较并返回结果
将返回false;即使它在第一次比较期间得到结果(3!=3
);但它会做所有的比较。不像&&
只进行1次比较并返回结果
答案 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)
从左到右进行评估:
9th
是3!=3 ^ 2==2
,这是真的。
false ^ true
是true ^ 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)被评估为真。