如何根据布尔值反转三元条件表达式?
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;
}
但是,将整个函数写成一行会很有帮助。所以,就逻辑表达式而言,我正在寻找一个操作 ∘以
的方式组合 a
和 b
一个 ∘ 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
。
我正在寻找一种方法来根据布尔参数反转条件表达式。当然也可以通过以下方式实现:
public int do(bool b)
{
if (b)
return this.a ? 1 : 0;
else
return this.a ? 0 : 1;
}
但是,将整个函数写成一行会很有帮助。所以,就逻辑表达式而言,我正在寻找一个操作 ∘以
的方式组合a
和 b
一个 ∘ 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
。