Chinaunix首页 | 论坛 | 博客
  • 博客访问: 471922
  • 博文数量: 134
  • 博客积分: 3056
  • 博客等级: 中校
  • 技术积分: 1150
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-14 15:53
文章分类
文章存档

2013年(1)

2010年(133)

我的朋友

分类: C/C++

2010-06-06 20:42:14

假设数是REGISTER(一般是某个寄存器),长度为LENposREGISTER的某一位,则0<=pos<=(LEN-1)

1. 用宏得到某数(一般是某个寄存器的某个状态位)的某位


#define BitGet(REGISTER,pos) ((REGISTER) >> (pos) & 1))


2. 把某位置1, 0<=pos<=LEN-1

 

#define BitSet(REGISTER,pos) ((REGISTER) |= 1<<(pos))

//或者将某些位同时置1,例如将第1、3、5位同时置1(pos1=1,pos2=2, …, posn=n, 0<=n<=(LEN-1))
REGISTER |= (1 << pos1)|(1 << pos3)|(1 << pos5);

 

3. 把某位清零00<=pos<=LEN-1

 

#define BitClr(REGISTER,pos) ((REGISTER) &= ~(1<<(pos))

//或者将某些位同时清0,例如将第0、2、4位同时清0(pos1=1,pos2=2, …, posn=n, 0<=n<=(LEN-1))
REGISTER &= ~((1<<pos0) | (1<<pos2) | (1<<pos4));


4.
REGISTERPOS位取反,0<=pos<=LEN-1
 

#define BitRes(REGISTER,pos) ((REGISTER) ^= 1<<(pos))

//或者将某些位同时取反,例如将第1、2、4位同时取反(pos1=1,pos2=2, …, posn=n, 0<=n<=(LEN-1))
REGISTER (REGISTER) ^= ((1<<pos1) | (1<<pos2) | (1<<pos4))

阅读(1201) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~