-3

因此,我设置了一个代码来查找用户输入与 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);
 }

所以问题是:

这合适吗?我知道它有效,但我更好奇这是否是不好的做法,并且有一天会在后面咬我。scanf这只是意见,还是像使用or一样大不gets?有打死马的表情吗?因为我想用它。

4

1 回答 1

3
  1. return语句中嵌套条件本身并没有错。

  2. ~result + 1不好。你试图否定result. 执行此操作的正确方法很简单-result~result + 1依赖于二进制补码表示,这是无处不在的,但这种表示更奇怪且不必要。

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

所以return语句可以写成:

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

或者:

return result > 0 ? 3*result : -result;
于 2019-07-03T21:13:59.053 回答