Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否存在逻辑运算符的表示形式,它返回三元运算符的相同结果?_C#_Logical Operators_Conditional Operator - Fatal编程技术网

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)
是一种直接翻译,我认为您无法将其简化。