位操作的一些常用宏定义

在嵌入式开发的过程中,需要经常用到一些位操作,比如设置字节的某个位的值,设置字节的某几个位的值等,可以将这些操作定义为一些宏定义,方便调用。

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开始。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值