如果我有这个等式:
var x = (true && false || true)
这相当于:
var x = ((true && false) || true)
或:
var x = (true && (false || true))
这背后的逻辑是什么?
答案 0 :(得分:9)
答案 1 :(得分:6)
在布尔逻辑中,“not”(!
)在“and”(&&
)之前评估,而“and”在“or”(||
)之前评估。通过使用double(&&
)和double(||
),这些运算符将短路,这不会影响逻辑结果,但如果需要,它会导致右侧的术语无法评估
因此
var x = (true && false || true)
评估为false|| true
,其评估结果为true
和
var x = ((true && false) || true)
评估为false || true
,其评估结果为true
和
var x = (true && (false || true))
评估为true && true
,其评估结果为true
答案 2 :(得分:3)
我相信它是
var x = ((true && false) || true)
...根据MSDN,&&
有 precedence 。
您认为编写该特定代码行的人可能会通过在正确的位置插入括号来明确其意图。帮助其他人,并将其添加进去。
答案 3 :(得分:2)
相当于
var x = ((true && false) || true)
&&运算符的优先级高于||操作
答案 4 :(得分:0)
&&
具有更高的优先级,因此第二种形式(三种)是正确的。至于逻辑,&&
往往与乘法模糊相关,||
与加法相关(如果使用零和非零分别表示false和true,则运算符具有等效的语义)。但主要是它自C以来的方式,也可能在C之前。
答案 5 :(得分:0)
如果您在此表达式中使用||是的,这意味着与其他结果无关,它总是真的
答案 6 :(得分:0)
由于运算符优先级(&&&"的优先级高于||),上述表达式的计算结果为((true && false) || true)
。
有关运营商优先权的更多信息,请查看此链接:http://msdn.microsoft.com/en-us/library/aa691323(v=vs.71).aspx
答案 7 :(得分:0)
&安培;&安培;优先级高于|| 所以前两个用例的行为完全相同。 大括号在这里没有意义,就像在:
a * b + c =(a * b)+ c
您可以使用大括号控制优先级和关联性。所以第三个用例将检查OR条件,然后检查AND。