假设数是REGISTER(一般是某个寄存器),长度为LEN,pos为REGISTER的某一位,则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. 把某位清零0,0<=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. 把REGISTER的POS位取反,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) |