关于bit操作

来源:互联网 发布:淘宝店铺转让可信吗 编辑:程序博客网 时间:2024/05/29 03:09

关于bit操作,在嵌入式软件中是经常用到的。通过是为了截取某几个bit位的值,或者替换某几个bit位的值。

UINT32 get_bit(UINT32 ulVal, UINT8 ucBottom, UINT8 ucTop)
{
UINT32 mask = 0x01;

//step 1:
mask = (mask << (ucTop - ucBottom + 1)) - 1;  //0x000011111,1的长度为截取的长度

//step 2:
ulVal = ulVal >> ucBottom; //将开始位的ucBottom右测数据清零并右移到低位

//step 3:
ulVal = ulVal & mask; //跟进step1的长度将ucTop左测清零,得到最终结果
}

另外数据的强制转换需要特别注意,很容易出错。


UINT32 set_bit(UINT32 ulScrData, UINT8 ucBottom, UINT8 ucTop, UINT32 ulInpData)
{
UINT32 mask = 0x01;

//step 1:
mask = (mask << (ucTop - ucBottom + 1)) - 1;  //0x000011111,1的长度为截取的长度

//step 2:
ulInpData = (ulInpData & mask) << ucBottom; //将输入置换数截取有效的长度

//step 3:
ulScrData = ~(mask << ucBottom);  //将源数据的要被置换的bit数据清零

//step 4:
ulScrData = ulScrData | ulInpData;

return ulScrData;
}

0 0
原创粉丝点击