RangeInt,开源一个有限范围计数器模块。c语言的。 可以用于单片机

开源一个有限范围计数器模块。c语言的。 可以用于单片机
这个类的用途是 实现一个小范围(比如从0~314,或者-100到+100)的整数,可以智能++ --操作。 超过范围可以不再增长(可以理解为上饱和,或者下饱和)或者回到另外一头。(由变量bool autoZero决定)

使用本模块,可以闭着眼睛加加减减,数据绝对不会超出上限和下限。
如果要获得当前数值,只要读取value变量就可以了。
使用前,要用构造函数RangeInt_construct() 设置一下struct RangeInt

void	RangeInt_construct	(struct RangeInt* this,bool autoZero,int vmax,int vmin);  
构造函数,运行的时候包括Vmax本数,
数值范围在     vmin<=x<=Vmax
this是对象指针
bool autoZero 	==true,表示加加减减的时候,超过范围回到另外一头。==false表示超过范围可以不再增长(可以理解为上饱和,或者下饱和)

本模块没有动态申请内存,所以没有析构函数
注意,本程序是用于c语言,不是c++哦

#ifndef 	_RangeInt_H					
#define 	_RangeInt_H					//-----------------------------------------------------					/*					这个类的用途是		实现一个小范围的整数,可以智能++  --操作。		模块建立于	2021/2/25 16:59			*/					#include "project_config.h"					//#include ".h"					//#include ".h"					//-----------------------------------------------------					//using namespace std;					//#include <string>					//#include <vector>					//-----------------------------------------------------typedef struct RangeInt{int value; //需要加减的那个数值bool autoZero; //==true,加减到头后,value就跳到另外一头。==false,加减到头后,数值不再增长或者下降(可以理解为上饱和,或者下饱和)int mmax;  //这个数值的上限int mmin;  //这个数值的下限		}RangeInt;  //本模块所有功能都基于这个数据结构//-----------------------------------------------------					void	RangeInt_construct	(struct RangeInt* this,bool autoZero,int vmax,int vmin);  //构造函数,运行的时候包括Vmax本数//void	RangeInt_set				(struct RangeInt* this,bool autoZero,int vmax,int vmin);void	RangeInt_set_zero(struct RangeInt* this);void	RangeInt_set_min(struct RangeInt* this);void	RangeInt_inc(struct RangeInt* this); //加一void	RangeInt_dec(struct RangeInt* this); //减一void 	RangeInt_get_value_as_String(struct RangeInt* this,char* str); //以字符串方式返回当前数值void	RangeInt_setValue(struct RangeInt* this,int Value);void	RangeInt_incN(struct RangeInt* this,int n); //一次增加Nvoid	RangeInt_decN(struct RangeInt* this,int n);//一次减小N	void	RangeInt_toMax(struct RangeInt* this); void	RangeInt_toMin(struct RangeInt* this);void	RangeInt_setPercentage(struct RangeInt* this,float percentage);  //设置value为当前区间的百分比//-----------------------------------------------------					//-----------------------------------------------------					//-----------------------------------------------------					
//	class	RangeInt				
//	{					
//		public:	
//			int value;
//			RangeInt	();		//构造函数
//			RangeInt	(bool autoZero,int vmax,int vmin=0)	;	//构造函数 autoZero表示数字到了最大值是归零还是保持最大值
//			RangeInt	(int vmax,int vmin=0)	;	
//			~RangeInt	();		//析构函数
//			void	set(bool autoZero,int vmax,int vmin);
//			void	set_zero();
//			RangeInt operator++ ();
//			RangeInt operator-- ();
//			void inc	();		
//			void dec	();
//			std::string get_value_as_stdString();
//						
//		private:				
//			bool autoZero;
//			int mmax;
//			int mmin;
//			void init	(int a,int b);		
//	};					//-----------------------------------------------------					
#endif						

以下是他的主代码

//-----------------------------------------------------						
/*						该模块著作权:	模块建立于	2021/2/25 16:59				
*/						
//-----------------------------------------------------
#include		"RangeInt.h"
//-----------------------------------------------------						
//-----------------------------------------------------						
//-----------------------------------------------------						
//-----------------------------------------------------						void	RangeInt__init(struct RangeInt* this,int a,int b)					{this->value=0;this->mmin=b;this->mmax=a;this->autoZero=false;}						
//-----------------------------------------------------						
void	RangeInt_construct	(struct RangeInt* this,bool autoZero,int vmax,int vmin)				
{						RangeInt__init(this,vmax,vmin);					this->autoZero=autoZero;
}						
//-----------------------------------------------------						
//-----------------------------------------------------						
//-----------------------------------------------------						
void	RangeInt_setValue(struct RangeInt* this,int Value)					
{int a=max(Value,this->mmin);a=min(a,this->mmax);this->value=a;
}						
//-----------------------------------------------------						
//void	RangeInt_set(struct RangeInt* this,bool autoZero,int vmax,int vmin)					
//{
//	this->value=vmin;
//	this->mmin=vmin;
//	this->mmax=vmax;
//	this->autoZero=autoZero;
//}						
//-----------------------------------------------------						
void	RangeInt_set_zero(struct RangeInt* this)					
{this->value=0;
}						
void	RangeInt_set_min(struct RangeInt* this)					
{this->value=this->mmin;
}						
//-----------------------------------------------------
void	RangeInt_inc(struct RangeInt* this)
{if(this->value<this->mmax)this->value++;else{if(this->autoZero){this->value=this->mmin;}else{this->value=this->mmax;}}
}
//-----------------------------------------------------						
void	RangeInt_dec(struct RangeInt* this)
{if(this->value>this->mmin)this->value--;else{if(this->autoZero){this->value=this->mmax;}else{this->value=this->mmin;}}
}
//-----------------------------------------------------						
//-----------------------------------------------------						
void RangeInt_get_value_as_String(struct RangeInt* this,char* str)
{int_2_String(str,this->value);
}
//-----------------------------------------------------
void	RangeInt_incN(struct RangeInt* this,int n)
{int a=this->value;a+=n;RangeInt_setValue(this,a);
}
//-----------------------------------------------------						
void	RangeInt_decN(struct RangeInt* this,int n)
{int a=this->value;a-=n;RangeInt_setValue(this,a);	
}
//-----------------------------------------------------
void	RangeInt_toMax(struct RangeInt* this)
{RangeInt_setValue(this,this->mmax);
}
//-----------------------------------------------------						
void	RangeInt_toMin(struct RangeInt* this)
{RangeInt_setValue(this,this->mmin);
}
//-----------------------------------------------------						
void	RangeInt_setPercentage(struct RangeInt* this,float percentage)
{float fm=this->mmax;float ps=percentage*fm;int a=(int)(ps+0.5f);RangeInt_setValue(this,a);
}
//-----------------------------------------------------						
//-----------------------------------------------------						
//-----------------------------------------------------						

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/61935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3588适配MTK7921 USB接口WiFi驱动开发

在当前RK原厂提供的SDK里面已经适配的WiFi模组有不少,但是支持的模组大部分集中在realtek、正基、英飞凌等厂家。主要型号有Realtek的RTL8188系列、RTL8723系列、RTL8812系列、RTL8821系列、RTL8822系列和支持WiFi 6 的RTL8852系列,正基的AP6275系列、AP6276系列等。接下来将…

38_转置卷积

转置卷积也被称为&#xff08;Transposed Convolution&#xff09;&#xff0c;也被称为fractionally_strided convolution、deconvolution。 转置卷积不是卷积的逆运算。 转置卷积也是卷积 转置卷积的作用是上采样。 1. 基础概念 转置卷积&#xff08;Transposed Convolution…

【Linux】内核的编译和加载

Linux内核是操作系统的核心&#xff0c;负责管理系统的硬件资源&#xff0c;并为用户空间的应用程序提供必要的服务。内核的编译和加载是操作系统开发和维护的重要环节。本文将详细介绍Linux内核的编译过程以及如何加载内核到系统中。 1. 引言 Linux内核的编译是一个复杂的过…

C++适配器模式之可插入适配器的实现模式和方法

可插入适配器与Adaptee的窄接口 在C适配器模式中&#xff0c;可插入适配器&#xff08;Pluggable Adapter&#xff09;是指适配器类的设计允许在运行时动态地插入不同的Adaptee对象&#xff0c;从而使适配器具有灵活性和可扩展性。这种设计使得适配器不仅限于适配一个特定的Ad…

mybatis-plus方法无效且字段映射失败错误排查

问题&#xff1a; Invalid bound statement (not found): com.htlc.assetswap.mapper.WalletMapper.insert&#xff0c;并且select * 进行查询时带下划线的字段未成功映射。 排查&#xff1a; 1.检查WalletMapper接口&#xff0c;确保继承自BaseMapper 2.启用驼峰命名法映射。a…

Qt桌面应用开发 第七天(绘图事件 绘图设备)

目录 1.绘图事件paintEvent 2.高级绘图 3.图片绘制 4.绘图设备 4.1QPixmap 4.2QBitmap 4.3QImage 4.4QPicture 1.绘图事件paintEvent paintEvent——绘图事件 需求&#xff1a;利用QPainter绘制点、线、圆、矩形、文字&#xff1b;设置画笔改为红色&#xff0c;宽度为…

使用IDEA构建springboot项目+整合Mybatis

目录 目录 1.Springboot简介 2.SpringBoot的工作流程 3.SpringBoot框架的搭建和配置 4.用Springboot实现一个基本的select操作 5.SpringBoot项目部署非常简单&#xff0c;springBoot内嵌了 Tomcat、Jetty、Undertow 三种容器&#xff0c;其默认嵌入的容器是 Tomcat&#xff0c;…

【含开题报告+文档+PPT+源码】基于SSM的电影数据挖掘与分析可视化系统设计与实现

开题报告 随着互联网的普及和数字娱乐产业的蓬勃发展&#xff0c;电影作为一种重要的娱乐方式&#xff0c;已经深入人们的日常生活。然而&#xff0c;面对海量的电影资源&#xff0c;用户在选择观影内容时常常感到困惑和无所适从。传统的电影推荐方式&#xff0c;如人工筛选、…

C++使用minio-cpp(minio官方C++ SDK)与minio服务器交互简介

目录 minio简介minio-cpp简介minio-cpp使用 minio简介 minio是一个开源的高性能对象存储解决方案&#xff0c;完全兼容Amazon S3 API&#xff0c;支持分布式存储&#xff0c;适用于大规模数据架构&#xff0c;容易集成&#xff0c;而且可以方便的部署在集群中。 如果你已经部…

【君正T31开发记录】8.了解rtsp协议及设计模式

前边搞定了驱动&#xff0c;先不着急直接上手撸应用层的代码&#xff0c;先了解一下大致要用到的东西。 设计PC端先用vlc rtsp暂时H264编码&#xff08;vlc好像不支持h265,这个后边我试试&#xff09;的视频流&#xff0c;先需要支持上rtsp server&#xff0c;了解rtsp协议是必…

JavaScript中的this指向绑定规则(超全)

JavaScript中的this指向绑定规则&#xff08;超全&#xff09; 1.1 为什么需要this? 为什么需要this? 在常见的编程语言中&#xff0c;几乎都有this这个关键字&#xff08;Objective-C中使用的是self),但是在JavaScript中的this和常见的面向对象语言中的this不太一样 常见面…

Spring注入Map学习

Spring注入Map学习 在Spring中 在策略模式中, 会经常用到 根据Bean名称获取Bean的实例 有2个方法很好用 1. 使用Autowired注入 2. 使用构造方法注入 但是奇怪的一点是: 日志打印并没有看到结果, 第一行的 Autowired的结果 是个null 那是因为 注入时机 的问题 注入时机&…

Redis五大基本类型——Set集合命令详解(命令用法详解+思维导图详解)

目录 一、Set集合类型介绍 二、常见命令 1、SADD 2、SMEMBERS 3、SISMEMBER 4、SCARD 5、SRANDMEMBER 6、SPOP 7、SMOVE 8、SREM ​编辑 9、集合间操作 &#xff08;1&#xff09;SINTER &#xff08;2&#xff09;SINTERSTORE &#xff08;3&#xff09;SUNION…

sql 查询语句:将终端数据形式转换成insert语句

文本转换&#xff1a;sql 查询语句&#xff1a;将终端数据形式转换成insert语句 如上&#xff0c;写过后端的都知道&#xff0c;从生产或其他地方拿到的数据&#xff0c;有可能会是图一&#xff1b;但实际上&#xff0c;我们需要图二的数据&#xff1b; 不废话&#xff0c;直接…

后端开发入门

后端开发最佳实践详解 1. 引言 后端开发不仅仅是编写功能代码&#xff0c;还涉及到如何构建稳定、可靠且高效的系统。掌握后端开发的最佳实践&#xff0c;可以帮助您避免常见的错误&#xff0c;提高代码质量&#xff0c;确保应用的可维护性和扩展性。以下内容将详细讲解这些关…

Ajax入门程序

前端和后台本来是没有联系的&#xff0c;前端想要从后台获取数据&#xff0c;就必须涉及到两个程序的交互&#xff0c;而Ajax就是用于完成两端交互的技术。 Ajax&#xff1a;Asynchronous JavaScript And XML&#xff1a;异步的JavaScript和XML。 异步交互&#xff1a;可以在不…

详解Qt 中使用虚拟键盘(软键盘qtvirtualkeyboard)

文章目录 详解 Qt 中使用虚拟键盘&#xff08;软键盘&#xff1a;QtVirtualKeyboard&#xff09;1. 虚拟键盘简介1.1 虚拟键盘的应用场景 2. 安装和配置2.1 安装 QtVirtualKeyboard2.2 配置环境变量 3. 使用虚拟键盘3.1 示例代码main.cppwidget.hwidget.cpp 4. 总结 详解 Qt 中…

第2.7节 AIGC+学术论文——选题与定位(二)

2.1 选题与定位 主题确定&#xff1a;选择一个既符合学术兴趣又具有研究价值的主题。 身份背景研究领域问题具体化使用AI搜索&#xff1a;文献回顾最新研究选题可行性与实际应用迭代 2.2.1身份背景研究领域问题具体化 &#xff08;一&#xff09;身份背景 根据以下模板…

TCL嵌入式面试题及参考答案

USB2.0 和 USB3.0 的速度区别是什么? USB2.0 和 USB3.0 在速度上有显著的区别。USB2.0 理论上的最高传输速度为 480Mbps,也就是 60MB/s 左右。而 USB3.0 的理论传输速度则可达到 5Gbps,即约 625MB/s ,这比 USB2.0 快了很多倍。 在实际应用中,USB2.0 通常用于一些对速度要求…

微信小程序中使用iconfont的详细教程

我们知道微信小程序对包体积有很严格的要求&#xff0c;最大不超过2M&#xff0c;而图片资源对包体检有至关重要的影响&#xff0c;所以使用自定义的图标字体来代替大量图标图片也是提高小程序性能的重要手段&#xff0c;总的来说在微信小程序中使用 IconFont&#xff08;图标字…