识别C ++代码问题

时间:2015-02-08 06:57:01

标签: c++

这是什么意思?

我有理解这个问题,因为我没有使用这种格式。

任何人都可以翻译这种情况吗?

(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10);

3 个答案:

答案 0 :(得分:2)

这是两个三元运营商。三元运算符将if-else语句压缩为一行。 (expression ? fireOnTrue() : fireOnFalse())例如

if(D == 4) {
    explode();
} else {
    explodeTwice();
}

可以写成:

D == 4 ? explode() : explodeTwice()

因此,如果我们采用(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10);并将其细分,我们会得到:

if(D == 4) {
    (i % 2 == 0 ? 10 : 14);
} else
    10;
}

再向下打破一步:

if(D == 4) {
    if(i % 2 == 0) {
        10;
    } else {
        14;
    }
} else
    10;
}

答案 1 :(得分:1)

让我们一块一块地看看那个怪物。

(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10)

此行使用ternary operator x ? y : z,返回

  • y if x == true
  • z if x == false

(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10)首先检查D是否等于4

  • 如果D等于4,则返回(i % 2 == 0 ? 10 : 14)
  • 如果D不等于4则会返回10

如果D恰好等于4,那么将解析表达式(i % 2 == 0 ? 10 : 14)

(i % 2 == 0 ? 10 : 14)首先检查i % 2 == 0是真还是假。 %是剩余的又名模运算符,它返回a % b的除法的余数a / b。

将结果与0进行比较与说“均匀划分”相同,即没有余数。

除以2的余数可以是01,因此:

  • 0如果i是偶数
  • 1如果i是奇数

换句话说,如果(i % 2 == 0 ? 10 : 14)为偶数,10将返回i,如果14为奇数,则会i


总之,(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10)可以评估为1014,具体取决于Di,如下所示:

  • 如果D == 4i为偶数,则评估为10
  • 如果D == 4i为奇数,则评估为14
  • 如果D != 4,则评估为10

因此,表达式可以简化为一种方法:

int return10or14(int D, int i) {
    if (D != 4 || i % 2 == 0)
        return 10;
    else
        return 14;
}

答案 2 :(得分:0)

表达式? b:c只表示如果(a)则b,否则c。 因此,假设您的表达式计算为retval,它可以写成:

if(D == 4)
{
    if(i%2 == 0) 
      retval = 10;
    else 
      retval = 14;
}
else  retval = 10;