三元条件表达式的解释

时间:2015-10-09 16:39:54

标签: expression ternary-operator

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

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

任何人都可以帮我解释这个表达吗?或者如何将这个表达式分成几个部分。

1 个答案:

答案 0 :(得分:1)

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

(EXPRESSION) ? (RESULT1) : (RESULT2)

这相当于

if (EXPRESSION) { 
  return RESULT1; 
} else {
  return RESULT2;
}

所以在你的特定情况下

EXPRESSION = (bit1 == bit2)
RESULT1 = x&bit1
RESULT2 = x&bit1 ? bit2 : 0

现在我们看到这是一个连锁的三元表达。 Jeeze这是一些严格的代码。然后是RESULT2

EXPRESSION2 = x&bit1
RESULT2,1 = bit2
RESULT2,2 = 0

所以现在我们可以编写(稍微更具可读性)的版本:

if (bit1 == bit2) {
  return x&bit1;
} else {
  if (x&bit1) {
    return bit2;
  } else {
    return 0;
  }
}

希望有所帮助。