逻辑表达式中的动作序列
sequence of actions in the logical expression
我想问一下这个逻辑表达式的正确顺序"reading":
(true && false | true)
我认为它 returns 错误,因为第一个表达式 - true && false
但可能我做错了什么,应该 "reading" 另一种方式。
你能解释一下什么是正确的阅读方式吗?
检查 Operators Precedence 的以下 table。
|
(按位包含或)的优先级高于 &&
(逻辑与),因此首先计算 false | true
。
也就是说,评估顺序在您的示例中并不重要。 (true && false) | true
和 true && (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.
|是按位运算符,&& 是逻辑运算符。按位运算符比逻辑运算符具有更高的优先级。
在你的情况下,第一次评估将是错误的 |真实的是真实的。
然后它将评估上面的真 && 结果为真。
所以给定的陈述是正确的。
我想问一下这个逻辑表达式的正确顺序"reading":
(true && false | true)
我认为它 returns 错误,因为第一个表达式 - true && false
但可能我做错了什么,应该 "reading" 另一种方式。
你能解释一下什么是正确的阅读方式吗?
检查 Operators Precedence 的以下 table。
|
(按位包含或)的优先级高于 &&
(逻辑与),因此首先计算 false | true
。
也就是说,评估顺序在您的示例中并不重要。 (true && false) | true
和 true && (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.
|是按位运算符,&& 是逻辑运算符。按位运算符比逻辑运算符具有更高的优先级。
在你的情况下,第一次评估将是错误的 |真实的是真实的。
然后它将评估上面的真 && 结果为真。
所以给定的陈述是正确的。