Shorthand条件赋值方式

Shorthand Way of Conditional Assignments

是否有 shorthand 编写等效代码的方法:

if (variable > max){
    variable = max;
}else if (variable < -max){
    variable = -max;
}

我知道我可以使用三元运算符来获得这样的代码:

variable = variable > max ? max : variable;
variable = variable < -max ? -max : variable;

问题:

但是这段代码有更短的版本吗?

注意:也不是嵌套的三元运算符。

P.S.: 这不一定是特定于语言的问题,但我正在用 C 编写代码,所以我希望得到可以在该语言中工作的答案。

您可以嵌套条件运算符:

variable = variable > max ? max : (variable < -max ? -max : variable);

恕我直言,这几乎是不可读的,所以我不推荐它。

你可能会使用这个结构:

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(@[ 的荣誉=26=]).