C# 是否存在逻辑运算符的表示形式,它返回三元运算符的相同结果?
我很好奇三元运算符是否存在一个逻辑表示,它为每个条件组合提供相同的结果。我在下面试过了,但它不能涵盖所有情况。这个问题有正确的表述吗C# 是否存在逻辑运算符的表示形式,它返回三元运算符的相同结果?,c#,logical-operators,conditional-operator,C#,Logical Operators,Conditional Operator,我很好奇三元运算符是否存在一个逻辑表示,它为每个条件组合提供相同的结果。我在下面试过了,但它不能涵盖所有情况。这个问题有正确的表述吗 Ternary Condition : a ? b : c Logical Version : (a && b) || c 当给出以下条件时,与三元结果相比,逻辑版本在一种条件下失败: (true && true) || true = true (true && true) || false = tru
Ternary Condition : a ? b : c
Logical Version : (a && b) || c
当给出以下条件时,与三元结果相比,逻辑版本在一种条件下失败:
(true && true) || true = true
(true && true) || false = true
(true && false) || true = true //must be false
(true && false) || false = false
(false && true) || true = true
(false && true) || false = false
(false && false) || true = true
(false && false) || false = false
如果我们谈论预先计算的布尔变量或常量,那么可以像Lee所评论的那样编写三元运算符的逻辑等价物
(a && b) || (!a && c)
或者
(!a || b) && (a || c)
然而,由于这个问题被标记为C#,我认为重要的是讨论a
、b
或C
实际上是具有副作用的布尔表达式的情况(如函数调用或具有支持逻辑的属性获取程序)
因此,让我们比较一下评估a
、b
和c
的频率:
案例1:三元运算符a?b:c
,a
只计算一次,根据a
,b
或c
计算一次
案例2:(a和b)|(!a和c)
对a=1的a的求值次数取决于b的值。请注意,#a
是a
表达式的求值次数
a b c #a #b #c
0 0 0 2 0 1
0 0 1 2 0 1
0 1 0 2 0 1
0 1 1 2 0 1
1 0 0 2 1 0
1 0 1 2 1 0
1 1 0 1 1 0
1 1 1 1 1 0
案例3:(!a | | b)和&(a | | c)
同样,对于a=1
的a的求值次数取决于b
,但与案例2相反
a b c #a #b #c
0 0 0 2 0 1
0 0 1 2 0 1
0 1 0 2 0 1
0 1 1 2 0 1
1 0 0 1 1 0
1 0 1 1 1 0
1 1 0 2 1 0
1 1 1 2 1 0
<>我不认为表达式评价的副作用,即<代码> a <代码>的评价改变了后续评价的价值,因为它可能是偏离主题的。为什么必须是错误的?code>(真与假)|真
是(假)|真
=真
,因为我们希望它给出相同的三元条件结果,即“真”?false:true=false‘哦,我现在明白了:)三元运算符就像一个简短的if
b
和c
不必是布尔值b
是表达式a
返回true
和c
如果a
返回false时的返回值。因此,逻辑版本没有意义。请提供更多信息,说明您希望通过这种逻辑实现什么。(a&b)|(!a&c)
是一种直接翻译,我认为您无法将其简化。