限制幅度函数作用
在实际的数据处理中我们经常会遇到数据限制的情况,比如我们设置的数据由外部输入这个数据有一个范围如果在这个范围内我们就要 如果不在这个范围我们就要限制这个函数意思很简单但是实现方式有很多种
传统if else写法
/*
* 数据限幅函数
*/
static int16_t limit_Data(int16_t val, int16_t low, int16_t high)
{
if(val<low) val = low;
else val = val;
if(val>high) val = high;
else val = val;
return val;
}
三目运算符
/*
* 数据限幅函数
*/
static int16_t limit_Data(int16_t val, int16_t low, int16_t high)
{
return ((val)<(low)?(low):((val) >(high)?(high):(val)));
}
限制幅度的原理
如果输入的参数是小于下限值的那么就把下限值赋值给传入的值*(防止过小*)
否则就把传入的值直接返回。
同理如果输入的值大于上限值那么就把上限值赋值给传入的值*(防止过大)*
否则就把传入的值直接返回。
三目运算符?
(表达式)?(表达式1):(表达式2)
如果表达式为真 那么返回表达式1的值 否则也就是表达式为假就返回表达式2的值
((val)<(low)?(low):((val) >(high)?(high):(val)));
表达式:(val)<(low)
表达式1:(low)
表达式2:(((val) >(high)?(high):(val)))
表达式为真表明 val小于下限了就应该返回low 下限
表达式为假则返回表达式2的值
(((val) >(high)?(high):(val)))
表达式2:
表达式:(val) >(high)
表达式1:(high)
表达式2:(val)
表达式为真表明 val大于了上限就应该返回high 上限
表达式为假则表明 它既不是上限也不是下限 应该返回自己val
测试输出
上限要大于等于下限值
数学表达式
【a,b】
b>=a
当然也可以换成浮点或者32位数据
测试代码
#include <stdio.h>
typedef unsigned int uint32_t;
typedef unsigned short int uint16_t;
typedef short int int16_t;
// static int16_t limit_Data(int16_t val, int16_t low, int16_t high)
// {
// if(val<low) val = low;
// else val = val;
// if(val>high) val = high;
// else val = val;
// return val;
// }
static float limit_Data(float val, float low, float high)
{
return ((val)<(low)?(low):((val) >(high)?(high):(val)));
}
void my_Test3(void)
{
printf("limit_Data(-50,-30.5,1500) = %lf\r\n",limit_Data(-50,-30.5,1500));
printf("limit_Data(-30,-30.6,1500) = %lf\r\n",limit_Data(-30,-30.7,1500));
printf("limit_Data(50,-30.7,1500) = %lf\r\n",limit_Data(50,-30,1500));
printf("limit_Data(1500,-30,1500) = %lf\r\n",limit_Data(1500,-30,1500));
printf("limit_Data(1800,-30,1500) = %lf\r\n",limit_Data(1800,-30,1500));
printf("limit_Data(1800,0,0) = %lf\r\n",limit_Data(1800,0,0));
printf("limit_Data(100,0,-1) = %lf\r\n",limit_Data(100,0,-1));
}
int main(void)
{
my_Test3();
getchar();
return 0;
}