有没有写等效代码的简便方法:

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/

10-13 00:55