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);
posted @ 2022-05-08 20:08  大高玩子  阅读(1956)  评论(0编辑  收藏  举报