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 @   大高玩子  阅读(2294)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示