如何根据布尔值反转三元条件表达式?

时间:2018-08-16 07:21:43

标签: c# logical-operators

我正在寻找一种基于布尔参数反转条件表达式的方法。当然,可以通过以下方式完成此操作:

UIView

但是,将整个功能设置为单行将很有帮助。因此,就逻辑表达式而言,我正在寻找一种操作∘,以将public int do(bool b) { if (b) return this.a ? 1 : 0; else return this.a ? 0 : 1; } a组合在一起的方式

a∘b = a

a∘(¬b)=¬a

问题:是否存在这样的逻辑操作(或操作组合)?

4 个答案:

答案 0 :(得分:5)

看来我们要xnor:

return (!(a ^ b)) ? 1 : 0;

(但是我们没有xnor运算符,因此我将xor与not组合在一起)

或者通过交换结果子表达式来简化:

return (a ^ b) ? 0 : 1;

答案 1 :(得分:5)

我建议一个简单易懂的实现方式:

return (b == this.a) ? 1 : 0;

由于基于原始代码,因此您似乎想返回1(如果相等),否则返回0

答案 2 :(得分:0)

当然,这是您需要的方法,反XOR

public int do(bool b)
{  
    return b ^ this.a ? 0 : 1;
}

答案 3 :(得分:0)

您可以创建嵌套的三元条件:

public int do(bool b)
{  
   return b ? (this.a ? 1 : 0) : (this.a ? 0 : 1);
}

或由内而外:

public int do(bool b)
{  
   return this.a ? (b ? 1 : 0)
}

或者在您的示例案例中,它甚至更简单:

public int do(bool b)
{  
    return a && b; // edit: won't work for !a !b, also int-cast missing...
}

如果在真值表中找到逻辑表达式,这很容易:

enter image description here