在 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);
}
所以问题是:
这样合适吗?我知道它有效,但我更好奇这是否是一种不好的做法,以及有一天它会如何在后方大肆攻击我。这只是个人意见还是像使用 scanf
或 gets
一样强烈反对?有没有打死马的表情包?因为我想用它。
在 return
语句中嵌套条件没有错,本身。
~result + 1
不好。您正试图否定 result
。正确的做法是 -result
。 ~result + 1
依赖补码表示,这种表示很普遍,但是这个表达式比较奇怪,也没有必要。
你不需要(result < 0 ? ~result + 1 : result)
。仅当 x > base
为假时才计算此表达式,在这种情况下 result
必须小于或等于零,并且您希望 return -result
,因为它同时处理小于零的情况 (return -result
) 和等于零的情况 (return 0
,当 result
为零)。
所以return
语句可以写成:
return x > base ? 3*result : -result;
或:
return result > 0 ? 3*result : -result;
所以我设置了一个代码,用于查找用户输入与 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
一样强烈反对?有没有打死马的表情包?因为我想用它。
在
return
语句中嵌套条件没有错,本身。~result + 1
不好。您正试图否定result
。正确的做法是-result
。~result + 1
依赖补码表示,这种表示很普遍,但是这个表达式比较奇怪,也没有必要。你不需要
(result < 0 ? ~result + 1 : result)
。仅当x > base
为假时才计算此表达式,在这种情况下result
必须小于或等于零,并且您希望 return-result
,因为它同时处理小于零的情况 (return-result
) 和等于零的情况 (return0
,当result
为零)。
所以return
语句可以写成:
return x > base ? 3*result : -result;
或:
return result > 0 ? 3*result : -result;