关闭

位操作的一些常用宏定义

169人阅读 评论(0) 收藏 举报
分类:

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

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
查看评论

用宏定义来完成位运算(置位,复位,截取)

1、用宏定义来完成位运算 1、置位    置位特定位n:#define   SET_NTH_BIT(x, n)   ( x | ((1U) 置位n到m位: #define  SET_BIT_N_TO_M(x,n,m) (x | (...
  • zwh847021940
  • zwh847021940
  • 2016-09-13 14:54
  • 1142

常用位操作宏定义实例

 /* 常用位操作宏定义实例 */ #include #define CPL_BIT(value,bit) (value^=(1 #define SET_BIT(value,bit) (value|=(1 #define CLR_BIT(value,bit) (value...
  • xinqiaoliu
  • xinqiaoliu
  • 2015-02-26 16:11
  • 253

C/C++常用宏定义,注意事项,宏中#和##的用法

总结下宏和函数的不同之处,以供大家写代码时使用,这段总结摘自《C和指针》一书。 当然宏定义非常重要的,它可以帮助我们防止出错,提高代码的可移植性和可读性等。 下面列举一些成熟软件中常用得宏定义 1,防止一个头文件被重复包含 #ifndef COM
  • anye3000
  • anye3000
  • 2011-08-10 17:30
  • 4483

用宏定义来完成位运算及复杂宏定义的解析方法

用宏定义来完成位运算及复杂宏定义的解析方法 #include // 第一题:用宏定义将32位数x的第n位(右边起算,也就是bit0算第1位)置位 //注意:1.宏名要大写 2.宏要放外面  3.参数加()  4.常数也要加()规范 #define SET...
  • gysmmzh
  • gysmmzh
  • 2016-04-16 18:45
  • 831

avr的一些宏定义,可以类似51单片机那样按位对端口引脚操作

avr的一些宏定义,可以类似51单片机那样按位对端口引脚操作,方便操作!   #ifndef INCFILE1_H_ #define INCFILE1_H_ #include // Macro to access bits like variables: struct bi...
  • zmy12007
  • zmy12007
  • 2013-04-12 23:40
  • 2193

C常用位操作相关宏定义

/* 位操作相关定义 */ /* 1. 获取指定位数掩码 */ #define BITS_MSK_GET(bitsoff, bits) (((0x01 /* 2. 清除指定N BITS */ #define BITS_CLR(var,bitsoff,bits) ((va
  • luoqiaofa
  • luoqiaofa
  • 2011-08-23 22:38
  • 699

C/C++常用宏定义

下面列举一些成熟软件中常用得宏定义 1,防止一个头文件被重复包含  #ifndef COMDEF_H  #define COMDEF_H  //头文件内容 ... #endif  2,重新定义一些类型,防止由于各种平...
  • lp310018931
  • lp310018931
  • 2015-10-09 22:24
  • 564

iOS-常用宏定义大全

字符串是否为空 #define kStringIsEmpty(str) ([str isKindOfClass:[NSNull class]] || str == nil || [str length] 数组是否为空 #define kArrayIsEmpty(a...
  • u014220518
  • u014220518
  • 2016-12-19 10:16
  • 1572

宏定义与位运算

实例:用宏定义实现值互换 试定义一个带参数的宏swap(a,b)以实现两个整数之间的交换,并利用它将一维数组a和b的值互换。 (注:宏定义不能换行) 代码: #include #define swap(a,b){int c;c = a;a = b;b =c;} int main() { int i,...
  • desirelll
  • desirelll
  • 2016-04-07 09:30
  • 225

一些常用的宏定义

1 #pragma comment(lib, "comctl32.lib")2 #pragma pack(1)3 #pragma warning(push) #pragma warning(disable:4200)4 #if defined A || defined B#els...
  • silence_nature
  • silence_nature
  • 2013-08-29 17:43
  • 284
    个人资料
    • 访问:7826次
    • 积分:298
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:17篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论