初出茅庐的小李第71篇博客之三目运算符实现限幅函数

限制幅度函数作用

在实际的数据处理中我们经常会遇到数据限制的情况,比如我们设置的数据由外部输入这个数据有一个范围如果在这个范围内我们就要 如果不在这个范围我们就要限制这个函数意思很简单但是实现方式有很多种

传统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;
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值