因此,我设置了一个代码,该代码可找到用户输入与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
或gets
一样大?是否有击败死马的表情符号?因为我想使用它。
答案 0 :(得分:3)
在return
语句中嵌套条件毫无疑问,本身。
~result + 1
不好。您正在尝试否定result
。正确的方法是简单地-result
。 ~result + 1
依靠普遍存在的补码表示法,但是这种表达方式很古怪而且不必要。
您不需要(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;