位操作的一些常用宏定义
来源:互联网 发布:哪本书 java 算法程序 编辑:程序博客网 时间:2024/05/19 04:54
在嵌入式开发的过程中,需要经常用到一些位操作,比如设置字节的某个位的值,设置字节的某几个位的值等,可以将这些操作定义为一些宏定义,方便调用。
1. setBitValue
功能:设置字节的某个位的值为0或者为1。
宏定义:#define setBitValue(x,k,value) (x) = ( (value>0) ?((x) | (1<<((k)-0)) : ((x) & ~(1<<((k)-0)))
x ----- 字节
k -----设置字节的第几位,从0开始,0,1,2,3,4,5,6,7分别对应字节的1,2,3,4,5,6,7,8位
value --0 或者1,
2. getBitValue
功能:获取字节的某个位的值
宏定义:#define getBitValue(x,k,value) (value) = ((x>>((k)-0)) & 1)
x ---- 字节值
k ----字节的第几位,从0开始,0,1,2,3,4,5,6,7分别对应字节的1,2,3,4,5,6,7,8位
value --获取的字节的某位的值
3. clearBitMap
功能:将字节的fromBit位到toBit位清零
宏定义:#define clearBitMap(var,fromBit,toBit) (var) = ((var) & ~(((0x1<<((toBit)+1-(fromBit)))-1)<< (fromBit)))
fromBit, toBit, 设置的起始位,结束位,从0开始,0,1,2,3,4,5,6,7分别对应字节的1,2,3,4,5,6, 7,8位
var ---被清楚某些位的值
4. setBitMap
功能:将字节的fromBit位到toBit位设置为value
宏定义:#define setBitMap(var,fromBit,toBit,val) (var) = ((var) & ~(((0x1<<((toBit)+1-(fromBit)))-1)<< (fromBit))) | ((val) << (fromBit + 0))
fromBit, toBit, 设置的起始位,结束位,从0开始,0,1,2,3,4,5,6,7分别对应字节的1,2,3,4,5,6, 7,8位
var ---需要设置的字节
val --- 需要设置的值
5.cmpBitValue(a,b,bit)
功能:比较字节a和字节b的bit位的值是否相同,相同则为0,不同则为1
宏定义:#define cmpBitValue(a,b,bit) ((((a)>>bit) & 0x01) == (((b)>>bit) & 0x01) ?0:1)
a,b---需要比较的两个字节
bit----需要比较的字节位,从0开始,0,1,2,3,4,5,6,7分别对应字节的1,2,3,4,5,6, 7,8位
6.getBitMap(a,fromBit,toBit,b)
功能:获取字节a的fromBit到toBit位的值
宏定义:#define getBitValue(a,fromBit,toBit,b) ((b) = (((a)>> (frombit)) & ( (0x01) << ((toBit) + (fromBit) - 1))))
a---需要获取数据的原字节
b---获取的数据存储在b中
fromBit,toBit---开始bit位和结束bit位,bit从0开始
7. cmpBitMap(a,b,fromBit,toBit)
功能:比较字节a和字节b从fromBit到toBit之间的位是否相等。相等返回0,不相等返回1
宏定义:#define cmpBitMap(a,b,fromBit,toBit) ((((a) >>(fromBit)) &((1 <<((toBit)-(fromBit)+1)) -1)) ^ (((b) >>(fromBit)) &((1 <<((toBit)-(fromBit)+1)) -1))) //bit从0开始
a,b----比较的字节
fromBit,toBit,比较的起始位和结束位,bit0开始。
- 位操作的一些常用宏定义
- C常用位操作相关宏定义
- 常用位操作宏定义实例
- 一些常用的宏定义
- 一些常用的宏定义
- 一些常用的宏定义
- 一些常用的宏定义
- 常用的一些宏定义
- avr的一些宏定义,可以类似51单片机那样按位对端口引脚操作
- C语言一些常用的“位”操作函数
- C语言一些常用的“位”操作函数
- C语言一些常用的“位”操作函数
- 一些可以常用的宏定义
- iOS 一些常用的宏定义
- 常用的位操作
- 内核中一些宏操作的定义
- 一些常用的定义文件
- 一些Java的常用定义
- C#Tostring()格式转换
- 临时禁用Resharper
- 纯CSS3实现的鼠标悬停时边框旋转
- Android自定义一个广播接收器BroadcastReceiver监听本地消息
- android-传感器
- 位操作的一些常用宏定义
- macOS 10.12.1 Idea调试Go程序遇到could not launch process: could not get thread count
- @Resource 的出现某个类获取冲突的问题
- 1.1 springboot cli 安装
- 写在2017年初元月三号
- scrapy引用包出错ImportError : cannot import name '_win32stdio'
- Matlab-矩阵的索引
- hdu 1892 A Bug's Life
- App组件化与业务拆分那些事