常用的bit位操作
//判断某1位是1还是0
#ifndef GET_BIT
#define BIT_IS_1(value,bitpos) (((value)&(1<<(bitpos)))>>(bitpos))
#endif//读取指定位置bit位的值
#ifndef GET_BIT
#define GET_BIT(value,bitpos) ((value)&(1<<(bitpos)))
#endif//取反指定位置bit位的值
#ifndef REV_BIT
#define REV_BIT(value,bitpos) ((value)^=(1<<(bitpos)))
#endif//把某个bit位置0
#ifndef SET_0_BIT
#define SET_0_BIT(value,bitpos) ((value)&=~(1<<(bitpos)))
#endif//把某个bit位置1
#ifndef SET_1_BIT
#define SET_1_BIT(value,bitpos) ((value)|= (1<<(bitpos)))
#endif//将两个unsigned char 转换成 unsigned short(BYTExBYTE2WORD)
#ifndef MAKE_WORD
#define MAKE_WORD(low, high) ((unsigned short)(((unsigned char)(((unsigned __int64)(low)) & 0xff)) | ((unsigned short)((unsigned char)(((unsigned __int64)(high)) & 0xff))) << 8))
#endif//将两个unsigned short转换成 long(WORDxWORD2DWORD)
#ifndef MAKE_LONG
#define MAKE_LONG(low, high) ((long)(((unsigned short)(((unsigned __int64)(low)) & 0xffff)) | ((unsigned long)((unsigned short)(((unsigned __int64)(high)) & 0xffff))) << 16))
#endif
//取一个数的其中几位,例如:x的bit[7,4]:表示状态,则取值计算为 auto val=GET_4LO2HI(x,4,7);
#ifndef GET_4LO2HI
#ifdef __cplusplus
#define GET_4LO2HI(value,from,to) GetRangValue(value,from,to)
template<typename Type>
inline Type GetRangValue(Type vaule,int from,int to)
{
Type ret=0;
int temp = ((sizeof(Type)*8)-1)-to;
ret = (Type)(vaule<<temp);
ret =ret>>(temp+from);
return ret;
}
#else
/*
*在c语言中不能进行类型推导,故定义了如下几个宏
*/
#define GET_4LO2HI_USHORT(value,low,high) (((unsigned short)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI_UCHAE(value,low,high) (((unsigned char)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI_UINT(value,low,high) (((unsigned int)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI_ULONG(value,low,high) (((unsigned long)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI_U_INT64(value,low,high) (((unsigned __int64)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI_SHORT(value,low,high) (((signed short)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI_CHAE(value,low,high) (((signed char)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI_INT(value,low,high) (((signed int)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI_LONG(value,low,high) (((signed long)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI__INT64(value,low,high) (((signed __int64)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#endif
#endif
/*如
* 偏移地址 说明
*0x00 bit[7:0],对应 id 高 8 位
* bit[15:8],帧类型,
* 0x04,命令帧;
* 0x01,数据帧;
* 0x05,状态帧;
*0x01 bit[15:0],对应 id 低 16 位
* char _0x00addrValue=0xaa;
* char _0x01addrValue=0x55;
* auto id = MAKE_LONG_BIT(_0x01addrValue,0,15,_0x00addrValue,0,7);
*/
#ifndef MAKE_LONG_BIT
#define MAKE_LONG_BIT(low,lowfrom,lowto,high,highfrom,highto) MAKE_LONG(GET_4LO2HI(low,lowfrom,lowto),GET_4LO2HI(high,highfrom,highto))
#endif//取DWORD的低位WORD
#ifndef LO_WORD
#define LO_WORD(l) ((unsigned short)(((unsigned __int64)(l)) & 0xffff))
#endif//取DWORD的高位WORD
#ifndef HI_WORD
#define HI_WORD(l) ((unsigned short)((((unsigned __int64)(l)) >> 16) & 0xffff))
#endif//取WORD的低位BYTE
#ifndef LO_BYTE
#define LO_BYTE(w) ((unsigned char)(((unsigned __int64)(w)) & 0xff))
#endif//取WORD的高位BYTE
#ifndef HI_BYTE
#define HI_BYTE(w) ((unsigned char)((((unsigned __int64)(w)) >> 8) & 0xff))
#endif
//判断某1位是1还是0
#ifndef GET_BIT
#define BIT_IS_1(value,bitpos) (((value)&(1<<(bitpos)))>>(bitpos))
#endif//读取指定位置bit位的值
#ifndef GET_BIT
#define GET_BIT(value,bitpos) ((value)&(1<<(bitpos)))
#endif//取反指定位置bit位的值
#ifndef REV_BIT
#define REV_BIT(value,bitpos) ((value)^=(1<<(bitpos)))
#endif//把某个bit位置0
#ifndef SET_0_BIT
#define SET_0_BIT(value,bitpos) ((value)&=~(1<<(bitpos)))
#endif//把某个bit位置1
#ifndef SET_1_BIT
#define SET_1_BIT(value,bitpos) ((value)|= (1<<(bitpos)))
#endif//将两个unsigned char 转换成 unsigned short(BYTExBYTE2WORD)
#ifndef MAKE_WORD
#define MAKE_WORD(low, high) ((unsigned short)(((unsigned char)(((unsigned __int64)(low)) & 0xff)) | ((unsigned short)((unsigned char)(((unsigned __int64)(high)) & 0xff))) << 8))
#endif//将两个unsigned short转换成 long(WORDxWORD2DWORD)
#ifndef MAKE_LONG
#define MAKE_LONG(low, high) ((long)(((unsigned short)(((unsigned __int64)(low)) & 0xffff)) | ((unsigned long)((unsigned short)(((unsigned __int64)(high)) & 0xffff))) << 16))
#endif
//取一个数的其中几位,例如:x的bit[7,4]:表示状态,则取值计算为 auto val=GET_4LO2HI(x,4,7);
#ifndef GET_4LO2HI
#ifdef __cplusplus
#define GET_4LO2HI(value,from,to) GetRangValue(value,from,to)
template<typename Type>
inline Type GetRangValue(Type vaule,int from,int to)
{Type ret=0;int temp = ((sizeof(Type)*8)-1)-to;ret = (Type)(vaule<<temp);ret =ret>>(temp+from);return ret;
}
#else
/*
*在c语言中不能进行类型推导,故定义了如下几个宏
*/
#define GET_4LO2HI_USHORT(value,low,high) (((unsigned short)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI_UCHAE(value,low,high) (((unsigned char)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI_UINT(value,low,high) (((unsigned int)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI_ULONG(value,low,high) (((unsigned long)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI_U_INT64(value,low,high) (((unsigned __int64)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI_SHORT(value,low,high) (((signed short)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI_CHAE(value,low,high) (((signed char)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI_INT(value,low,high) (((signed int)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI_LONG(value,low,high) (((signed long)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#define GET_4LO2HI__INT64(value,low,high) (((signed __int64)(value<<(((sizeof(value)*8)-1)-high)))>>((((sizeof(value)*8)-1)-high)+low))
#endif
#endif
/*如* 偏移地址 说明*0x00 bit[7:0],对应 id 高 8 位* bit[15:8],帧类型,* 0x04,命令帧;* 0x01,数据帧;* 0x05,状态帧;*0x01 bit[15:0],对应 id 低 16 位* char _0x00addrValue=0xaa;* char _0x01addrValue=0x55;* auto id = MAKE_LONG_BIT(_0x01addrValue,0,15,_0x00addrValue,0,7);
*/
#ifndef MAKE_LONG_BIT
#define MAKE_LONG_BIT(low,lowfrom,lowto,high,highfrom,highto) MAKE_LONG(GET_4LO2HI(low,lowfrom,lowto),GET_4LO2HI(high,highfrom,highto))
#endif//取DWORD的低位WORD
#ifndef LO_WORD
#define LO_WORD(l) ((unsigned short)(((unsigned __int64)(l)) & 0xffff))
#endif//取DWORD的高位WORD
#ifndef HI_WORD
#define HI_WORD(l) ((unsigned short)((((unsigned __int64)(l)) >> 16) & 0xffff))
#endif//取WORD的低位BYTE
#ifndef LO_BYTE
#define LO_BYTE(w) ((unsigned char)(((unsigned __int64)(w)) & 0xff))
#endif//取WORD的高位BYTE
#ifndef HI_BYTE
#define HI_BYTE(w) ((unsigned char)((((unsigned __int64)(w)) >> 8) & 0xff))
#endif
相关文章:
常用的bit位操作
//判断某1位是1还是0 #ifndef GET_BIT #define BIT_IS_1(value,bitpos) (((value)&(1<<(bitpos)))>>(bitpos)) #endif //读取指定位置bit位的值 #ifndef GET_BIT #define GET_BIT(value,bitpos) ((value)&(1<<(bitpos))) #endif //取反指定位置bit位…...
自动控制原理【期末复习】(二)
无人机上桨之后可以在调试架上先调试: 1.根轨迹的绘制 /// 前面针对的是时域分析,下面针对频域分析: 2.波特图 3.奈维斯特图绘制 1.奈氏稳定判据 2.对数稳定判据 3.相位裕度和幅值裕度...
机器学习——集成学习和梯度提升决策树
集成学习 不同的算法都可以对解决同一个问题,但是可能准确率不同,集成学习就是不同算法按照某种组合来解决问题,使得准确率提升。 那怎么组合算法呢? 自举聚合算法**(bagging)** 顾名思义是 自举聚合 自举…...
MYSQL 查看SQL执行计划
一、explain explain select id,db,user,host,command,time,state,info from information_schema.processlist order by time desc; id: 查询的标记,可以查看不同查询的执行顺序。 select_type: 查询的类型,如SIMPLE、SUBQUERY、PRIMARY等。 table: …...
ARM-V9 RME(Realm Management Extension)系统架构之系统安全能力的MPAM
安全之安全(security)博客目录导读 关于RME的MPAM变化的完整定义见在《Arm Architecture Reference Manual Supplement, Memory System Resource Partitioning and Monitoring (MPAM), for A-profile architecture》中详细说明。 实现RME的处理元件(PE)能够生成一个2位的MPAM_…...
cuda 架构设置
import torch torch.cuda.get_device_capability(0) 添加cmake options: -DCMAKE_CUDA_ARCHITECTURES86 -DCMAKE_CUDA_COMPILER/usr/local/cuda-11.8/bin/nvcc cmake工程出现“CMAKE_CUDA_ARCHITECTURES must be non-empty if set.“的解决方法_failed to detec…...
基于 Vue 3 封装一个 ECharts 图表组件
在前端开发中,数据可视化是展示数据的重要方式之一。ECharts 是一个强大的开源可视化库,能够帮助我们轻松地创建各种图表。本文将介绍如何在 Vue 3 项目中使用 ECharts 封装一个图表组件。 代码 <template><div ref"chartRef" styl…...
LeetCode 算法: 旋转图像c++
原题链接🔗: 旋转图像 难度:中等⭐️⭐️ 题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图…...
Java Android 静态内部类 以及优雅实现单例模式/避免handler内存泄漏
前言 Java 中的静态内部类(Static Nested Class)是定义在另一个类里面的一个静态类。它和普通的内部类有些区别,主要是静态内部类不需要依赖于外部类的实例就可以被创建和访问。这种类的特性使得它非常适合用来作为辅助类,用于支持外部类的功能。 特点以及使用场景 静态内…...
Flink协调器Coordinator及自定义Operator
Flink协调器Coordinator及自定义Operator 最近的项目开发过程中,使用到了Flink中的协调器以及自定义算子相关的内容,本篇文章主要介绍Flink中的协调器是什么,如何用,以及协调器与算子间的交互。 协调器Coordinator Flink中的协调…...
C调用C++中的类
文章目录 测试代码 测试代码 在C语言中调用C类,需要遵循几个步骤: 在C代码中,确保C类的函数是extern “C”,这样可以防止名称修饰(name mangling)。 使用头文件声明C类的公共接口,并且为这个…...
NFTScan 正式上线 Sei NFTScan 浏览器和 NFT API 数据服务
2024 年 6 月 12 号,NFTScan 团队正式对外发布了 Sei NFTScan 浏览器,将为 Sei 生态的 NFT 开发者和用户提供简洁高效的 NFT 数据搜索查询服务。NFTScan 作为全球领先的 NFT 数据基础设施服务商,Sei 是继 Bitcoin、Ethereum、BNBChain、Polyg…...
2024年高考:计算机相关专业前景分析与选择建议
2024年高考结束,面对计算机专业是否仍具有吸引力的讨论,本文将从行业趋势、就业市场、个人兴趣与能力、专业选择建议等多个角度进行深入分析,以帮助考生和家长做出明智的决策。 文章目录 一、行业趋势与就业市场1. 计算机行业的发展与变革2. …...
SQL聚合函数---汇总数据
此篇文章内容均来自与mysql必知必会教材,后期有衍生会继续更新、补充知识体系结构 文章目录 SQL聚集函数表:AGV()count()根据需求可以进行组合处理 max()min()max()、min()、avg()组…...
webpack5新特性
webpack5新特性 持久化缓存资源模块moduleIds & chunkIds的优化更智能的tree shakingnodeJs的polyfill脚本被移除支持生成e6/es2015的代码SplitChunk和模块大小Module Federation 持久化缓存 缓存生成的webpack模块和chunk,来改善构建速度cache 会在开发模式被设置成 ty…...
java单体服务自定义锁名称工具类
需求: 操作员能够对自己权限下的用户数据进行数据填充,但是不同操作员之间可能会有重复的用户数据,为了避免操作员覆盖数据或者重复操作数据,应该在操作用户数据时加锁,要求加的这一把锁必须是细粒度的锁,…...
整理好了!2024年最常见 20 道并发编程面试题(四)
上一篇地址:整理好了!2024年最常见 20 道并发编程面试题(三)-CSDN博客 七、请解释什么是条件变量(Condition Variable)以及它的用途。 条件变量是一种同步机制,用于在多线程编程中协调线程间的…...
持续交付一
一、 你的项目依赖的 jQuery 版本是 1.0.0 ,Bootstrap 依赖的版本是 1.1.0,而 Chosen 依赖的版本是 1.2.0,看上去都是小版本不一致,一开始并没有发现任何问题,但是如果到后期发现不兼容,可能就为时已晚了。…...
基于 Python 解析 XML 文件并将数据存储到 MongoDB 数据库
1. 问题背景 在软件开发中,我们经常需要处理各种格式的数据。XML 是一种常用的数据交换格式,它可以存储和传输结构化数据。很多网站会提供 XML 格式的数据接口,以便其他系统可以方便地获取数据。 我们有这样一个需求:我们需要从…...
Interview preparation--案例加密后数据的模糊查询
加密数据的模糊查询实现方案 我们知道加密后的数据对模糊查询不是很友好,本篇就针对加密数据模糊查询这个问题来展开讲一讲实现的思路,希望对大家有所启发。为了数据安全我们在开发过程中经常会对重要的数据进行加密存储,常见的有࿱…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
