繁体   English   中英

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

[英]Nesting conditional operators in a return statement

因此,我设置了一个代码,用于查找用户输入与 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为假时才计算此表达式,在这种情况下result必须小于或等于零,并且您想要返回-result ,因为它处理小于零的情况(返回-result )和等于为零的情况(返回0 ,当result为零时与-result相同)。

所以return语句可以写成:

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

或者:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM