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=]).
是否有 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=]).