C 条件赋值的简写方法

C 条件赋值的简写方法,c,optimization,ternary-operator,C,Optimization,Ternary Operator,是否有一种简写方法来编写等效代码: if (variable > max){ variable = max; }else if (variable < -max){ variable = -max; } if(变量>最大值){ 变量=最大值; }否则如果(变量max?max:变量; 变量=变量max?max:(变量0)-(x)0)-(x)最大值){ 变量=sgn(变量)*最大值; } printf(“%d\n”,变量); 返回0; } 注意,在使用表示法的系统上,

是否有一种简写方法来编写等效代码:

if (variable > max){
    variable = max;
}else if (variable < -max){
    variable = -max;
}
if(变量>最大值){
变量=最大值;
}否则如果(变量<-最大值){
变量=-max;
}
我知道我可以使用三元运算符得到如下代码:

variable = variable > max ? max : variable;
variable = variable < -max ? -max : variable;
variable=variable>max?max:变量;
变量=变量<-最大值-max:变量;
问题: 但是有没有更简短的版本呢

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


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

您可以嵌套条件运算符:

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

我觉得这几乎是不可读的,所以我不推荐它。

您可能会使用这个结构:

if (abs(variable) > max) {
    variable = sgn(variable) * max;
}
标准C库中没有
sgn(x)
函数,但使用算术运算很容易实现:

#define sgn(x) (((x) > 0) - ((x) < 0))
#定义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;
}
#包括
#包括
#定义sgn(x)((x)>0)-(x)<0))
内部主(空)
{
int变量=-100,最大值=20;
如果(abs(可变)>最大值){
变量=sgn(变量)*最大值;
}
printf(“%d\n”,变量);
返回0;
}

注意,在使用表示法的系统上,它不适用于
INT\u MIN
,因为
-INT\u MIN
不能表示为
INT
(对@M.M的赞誉)。

你想让C编码更简洁吗?顺便说一句-三元运算符是语法上的糖衣,原始版本比三元运算符更好。它使你关心的条件非常清楚。如果变量不在这两个范围内,它根本不会赋值。一种写入方法是使用公共
MAX
MIN
宏并写入:
variable=MIN(MAX,variable);变量=最大值(-MAX,变量)。我同意原来的版本是最好的(如果你经常使用它,就把它变成一个宏或内联函数)谢谢,这就是我想要的for@Michael:当然,这将比原始代码运行得慢得多,原始代码可以使用比较和几个条件移动指令来实现。编写可读代码并信任编译器对其进行优化总是更好的。