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:当然,这将比原始代码运行得慢得多,原始代码可以使用比较和几个条件移动指令来实现。编写可读代码并信任编译器对其进行优化总是更好的。