将条件运算符嵌套在return语句中

时间:2019-07-03 21:00:23

标签: c++ c return conditional-operator bitwise-not

因此,我设置了一个代码,该代码可找到用户输入与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 个答案:

答案 0 :(得分:3)

  1. return语句中嵌套条件毫无疑问,本身

  2. ~result + 1不好。您正在尝试否定result。正确的方法是简单地-result~result + 1依靠普遍存在的补码表示法,但是这种表达方式很古怪而且不必要。

  3. 您不需要(result < 0 ? ~result + 1 : result)。仅当x > base为假(在这种情况下,result必须小于或等于零,并且您想返回-result时才计算该表达式,因为这两个值均小于零)大小写(返回-result)和等于零的大小写(返回0,当-result为零时与result相同)。

因此可以编写return语句:

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

或:

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