C语言位操作宏定义函数Set_bit Get_bit 宏
位操作宏定义
我们在写C语言时,经常需要用到位操作,但是每次自己使用逻辑运算符进行操作的时候,很费脑子,试试下面几个宏定义吧:
#define GET_BIT(value,bit) ((value)&(1<<(bit))) //读取指定位
#define CPL_BIT(value,bit) ((value)^=(1<<(bit))) //取反指定位
#define SET0_BIT(value,bit) ((value)&=~(1<<(bit))) //把某个位置0
#define SET1_BIT(value,bit) ((value)|= (1<<(bit))) //把某个位置1
位操作函数
这4个宏定义已经可以在大部分场合使用了,但是这个4个宏定义貌似功能也没事很全。
比如要操作寄存器的某些位,但是又不改变其他位怎么办呢,试试如下的函数吧:
//设置数据的某些位的值
/*
value 需要设置的数据的指针
bitl 需要设置的位的低位
bith 需要设置的位的高位
data 需要设置的数据
*/
void SET_DATA(unsigned int *value,unsigned int bitl,unsigned int bith,unsigned int data)
{
unsigned int* v = value;
if(bitl<=bith)
{
unsigned int bcount = bith-bitl+1;
unsigned int cbit=0;
unsigned int cdata=0;
for(unsigned int i=0;i<bcount;i++)
{
cdata |=(1<<i);
cbit |=(1<<(bitl+i));
}
(*v) &=~(cbit);
(*v) |=((data&cdata)<<bitl);
}
}
使用方法: 例如 变量Value 的初始值为0xFF,要设置Value 的 0 到 5位 为 2 ,那么就调用函数:
int Value = 0xFF;
SET_DATA(&Value,0,5,2);