我想问一下这个逻辑表达式的正确顺序“读取”:
(true && false | true)
由于第一个表达式-true && false
,我认为它返回的是false
但是可能我做错了,应该以另一种方式“阅读”。
您能解释一下正确的阅读方式吗?
答案 0 :(得分:1)
检查下表Operators Precedence。
|
(按位或)比&&
(逻辑与)具有更高的优先级,因此false | true
首先被求值。
也就是说,评估顺序在您的示例中无关紧要。 (true && false) | true
和true && (false | true)
均返回true
。在第一种情况下,它是false | true)
,即true
。在第二种情况下,它是true && true
,它也是true
。
现在,这是一个运算符优先级有所不同的示例:
System.out.println (false && true | true);
System.out.println (false && true || true);
|
的优先级高于&&
,但是&&
的优先级高于||
。
因此,这些表达式的计算方式为:
System.out.println (false && (true | true));
System.out.println ((false && true) || true);
因此,第一个返回false
,第二个返回true
。
答案 1 :(得分:1)
通过保持在通知中的要点以下:
除赋值运算符外,所有二进制运算符均从左向右求值;赋值运算符从右到左进行评估。
这将从左到右执行。在第二点之后,需要考虑的是操作员优先。
|是按位运算符,&&是逻辑运算。按位运算符比逻辑运算符具有更高的优先级。
在您的情况下,第一个评估为假|正确,正确。
然后它将评估上面为true的&&结果。
所以给定的陈述将是正确的。