逻辑表达式中的动作序列

sequence of actions in the logical expression

我想问一下这个逻辑表达式的正确顺序"reading":

(true && false | true) 

我认为它 returns 错误,因为第一个表达式 - true && false 但可能我做错了什么,应该 "reading" 另一种方式。 你能解释一下什么是正确的阅读方式吗?

检查 Operators Precedence 的以下 table。

|(按位包含或)的优先级高于 &&(逻辑与),因此首先计算 false | true

也就是说,评估顺序在您的示例中并不重要。 (true && false) | truetrue && (false | true) return 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);

因此,第一个 returns false 和第二个 returns true.

保持在通知点以下:

除了赋值运算符之外的所有二元运算符都是从左到右求值的;赋值运算符从右到左求值。

这将从左到右执行。之后要考虑的第二点是 Operator Precedence.

|是按位运算符,&& 是逻辑运算符。按位运算符比逻辑运算符具有更高的优先级。

在你的情况下,第一次评估将是错误的 |真实的是真实的。

然后它将评估上面的真 && 结果为真。

所以给定的陈述是正确的。