有没有写等效代码的简便方法:
if (variable > max){
variable = max;
}else if (variable < -max){
variable = -max;
}
我知道我可以使用三元运算符来获取如下代码:
variable = variable > max ? max : variable;
variable = variable < -max ? -max : variable;
题:
但是,此代码是否有更短的版本?
注意:也不是嵌套的三元运算符。
附注:这不一定是特定于语言的问题,但是我正在用C编写代码,因此我想获得可以使用该语言的答案。
最佳答案
您可能使用以下构造:
if (abs(variable) > max) {
variable = sgn(variable) * max;
}
标准C库中没有
sgn(x)
函数,但是使用算术运算很容易实现它:#define sgn(x) (((x) > 0) - ((x) < 0))
这是一个工作示例:
#include <stdio.h>
#include <math.h>
#define sgn(x) (((x) > 0) - ((x) < 0))
int main(void)
{
int variable = -100, max = 20;
if (abs(variable) > max) {
variable = sgn(variable) * max;
}
printf("%d\n", variable);
return 0;
}
请注意,它在使用two's complement表示的系统上不适用于
INT_MIN
,因为-INT_MIN
不能表示为int
(@ M.M表示感谢)。关于c - 条件分配的简写方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32488851/