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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~