Expression 三元条件表达式的解释

Expression 三元条件表达式的解释,expression,ternary-operator,Expression,Ternary Operator,三元条件表达式如下所示: #define _trans(x,bit1,bit2) \ ((bit1==bit2)?(x&bit1):(x&bit1)?bit2:0) 有人能帮我解释一下这个表达吗?或者如何将此表达式拆分为几个部分。三元运算符始终可以使用以下方法重写为if-else语句: (EXPRESSION) ? (RESULT1) : (RESULT2) 这相当于 if (EXPRESSION) { return RESULT1; } else { retu

三元条件表达式如下所示:

#define _trans(x,bit1,bit2) \ 
((bit1==bit2)?(x&bit1):(x&bit1)?bit2:0)

有人能帮我解释一下这个表达吗?或者如何将此表达式拆分为几个部分。

三元运算符始终可以使用以下方法重写为if-else语句:

(EXPRESSION) ? (RESULT1) : (RESULT2)
这相当于

if (EXPRESSION) { 
  return RESULT1; 
} else {
  return RESULT2;
}
所以在你的特殊情况下

EXPRESSION = (bit1 == bit2)
RESULT1 = x&bit1
RESULT2 = x&bit1 ? bit2 : 0
现在我们看到这一直是一个链式的三元表达式。天哪,这是一些粗俗的代码。结果2是

EXPRESSION2 = x&bit1
RESULT2,1 = bit2
RESULT2,2 = 0
因此,现在我们可以编写(更具可读性的)版本:


希望这能有所帮助。

如果您理解三元运算符
可以。但是,如何将此表达式拆分为几个部分。什么意思?您想获取中间值并将这些值放入变量中吗?@gbulmer但是第二个
在我的表达式中是什么意思?最后是结肠。表达式中有2个冒号…如果
bit1
等于
bit2
,则结果是
(x&bit1)
,如果不是,结果是
(x&bit1)?bit2:0
,对吗@gbulmerYes@HuangJie,如果有帮助的话,我已经给你写了一个更完整的解释。有两个冒号和两个问号,因为有两个三元运算
(x&bit1)?bit2:0)
是一种三值运算,仅当
(bit1==bit2)
为false时才需要/计算该运算。当
(bit1==bit2)
为真时,结果为
(x&bit1)
,因此
(x&bit1)?bit2:0)
永远不会被计算。谢谢老兄。我就是这么想的。
if (bit1 == bit2) {
  return x&bit1;
} else {
  if (x&bit1) {
    return bit2;
  } else {
    return 0;
  }
}