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

How to invert ternary conditional expression depending on boolean value?

我正在寻找一种方法来根据布尔参数反转条件表达式。当然也可以通过以下方式实现:

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

但是,将整个函数写成一行会很有帮助。所以,就逻辑表达式而言,我正在寻找一个操作 ∘以

的方式组合 ab

一个 ∘ b = a

一个 ∘ (¬b) = ¬a

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

看起来我们想要 xnor:

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

(但我们没有 xnor 运算符,所以我将 xor 与 not 组合)

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

return (a ^ b) ? 0 : 1;

当然,这是您需要的方法,反向异或:

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

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

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...
}

如果你在真理table中找到一个逻辑表达式,这很容易:

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

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

因为根据您的原始代码,如果它们相等,您似乎想要 return 1,否则 0