在彙編語言中有直接對位進行操作的指令,如置位、複位、位取反、測試某一位等,這對于硬體操作十分友善,在C語言中盡管也提供了一些位操作手段,如按位與、按位或、按位取反等,但它們是對一個位元組進行操作,如要對具體的一位操作,仍舊不友善,以下給出了一些函數,可以模仿彙編語言的一些位操作功能。
#define uchar unsigned char
uchar bittest(uchar num,uchar bit)
{ if(num>>bit&0x01==1)
return 1;
else
return 0;
}
uchar bitclr(uchar num,uchar bit)
{
uchar bit_value[]={1,2,4,8,16,32,64,128};
return num&~bit_value[bit];
}
uchar bitset(uchar num,uchar bit)
{
uchar bit_value[]={1,2,4,8,16,32,64,128};
return num|bit_value[bit];
}
uchar bitcpl(uchar num,uchar bit)
{
uchar bit_value[]={1,2,4,8,16,32,64,128};
if(num>>bit&0x01==1)
return num&~bit_value[bit];
else
return num|bit_value[bit];
}
void main(void)
{
uchar xx=0xfe;
xx=bitset(xx,0);
printf("The set out is %x\n",xx);
printf("The clr out is %x\n",bitclr(255,0));
printf("The test out is %x\n",bittest(0xff,0));
printf("The cpl out is %x\n",bitcpl(0x00,7));
}
*部落格内容為網友個人釋出,僅代表部落客個人觀點,如有侵權請聯系從業人員删除。