在返回语句中嵌套条件运算符

Nesting conditional operators in a return statement

本文关键字:嵌套 条件运算符 语句 返回      更新时间:2023-10-16

因此,我设置了一个代码,该代码可以找到用户输入和51之间差异的幅度(绝对值(。如果用户的输入大于51,则结果将三倍。不复杂。为了最大程度地减少代码本身,我提出了这个。

// Compare and determine the correct output based on program's 
// paramters:
//
// - find absolute value of input - 51
// - if input > 51 then multiply result by 3
//-----------------------------------------------------------
int calcDiff(int x) {
      const int base = 51;
      int result     = x - base;    
      return x > base ? 3*result : (result < 0 ? ~result + 1 : result);
 }

所以问题是:

这合适吗?我知道它有效,但我更加奇怪它是否是不良的习惯,有一天能大大咬我的后方。这是公正的意见,还是大小不喜欢使用scanfgets?有殴打死马的表情符号吗?因为我想使用它。

  1. return语句中的嵌套条件没有错

  2. ~result + 1不好。您正在尝试否定result。正确的方法就是-result~result + 1依赖于两者的补体表示,这是无处不在的,但是这种表达是奇怪和不必要的。

  3. 您不需要(result < 0 ? ~result + 1 : result)。仅当x > base为false时,才能评估此表达式,在这种情况下result必须小于或等于零,并且您要返回-result,因为该表达式处理小于零的情况(返回-result(和等于零情况(返回0,与result为零时与-result相同(。

因此return语句可以写:

return x > base ? 3*result : -result;

或:

return result > 0 ? 3*result : -result;