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