布尔逻辑 - (true && false || true)在C#中的含义是什么

本文关键字:amp true 是什么 false 布尔逻 | 更新日期: 2023-09-27 17:51:21

如果我有这个等式:

    var x = (true && false || true)

这是否等同于:

    var x = ((true && false) || true)

或:

    var x = (true && (false || true))

这背后的逻辑是什么?

布尔逻辑 - (true && false || true)在C#中的含义是什么

并胜过 OR。

所以它会是

var x = ((true && false) || true)

请参阅运算符优先级和关联性。

在布尔逻辑中,"not"(!(在"and"(&&(之前计算,"and"在"or"(||(之前计算。 通过使用双精度(&&(和双精度(||(,这些算子会短路,这不会影响逻辑结果,但如果需要,它会导致右侧的项无法计算。

因此

var x = (true && false || true)的计算结果为 false|| true,而的计算结果为 true

var x = ((true && false) || true)计算结果为 false || true,计算结果为 true

var x = (true && (false || true))的计算结果为 true && truetrue

我相信它是

var x = ((true && false) || true)

。因为根据 MSDN &&具有优先权

您可能会认为,编写该特定代码行的人可能会通过在正确的位置插入括号来明确他们的意图。帮其他人一个忙,然后把他们加进去。

相当于

var x = ((true && false) || true)

&& 运算符的优先级高于 || 运算符。

运算符优先级 MSDN 文档

&&具有更高的优先级,因此(三种形式中的(第二种形式是正确的。至于逻辑,&&往往与乘法模糊相关,||与加法有关(如果分别使用零和非零表示假和真,则运算符具有等效的语义(。但大多数情况下,这只是自 C 以来的方式,也可能在 C 之前。

如果你在这个表达式中使用 || true 该平均值与其他结果无关紧要,它始终为真

由于运算符优先级(&&&的优先级高于||(,上述表达式的计算结果为((true && false) || true)

查看此链接以获取有关运算符优先级的详细信息:http://msdn.microsoft.com/en-us/library/aa691323(v=vs.71(.aspx

&& 的优先级高于 ||因此,前两个用例的行为完全相同。大括号在这里没有任何意义,就像在:

a * b + c

= (a * b( + c

您可以使用大括号控制优先级和关联性。 因此,第三个用例将检查 OR 条件,然后检查 AND。