位操作的一些常用宏定义

来源:互联网 发布:哪本书 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开始。

0 0
原创粉丝点击