在匯編語言中有直接對位進(jìn)行操作的指令,如置位、復(fù)位、位取反、測試某一位等,這對于硬件操作十分方便,在C語言中盡管也提供了一些位操作手段,如按位與、按位或、按位取反等,但它們是對一個字節(jié)進(jìn)行操作,如要對具體的一位操作,仍舊不方便,以下給出了一些函數(shù),可以模仿匯編語言的一些位操作功能。 #define uchar unsigned char /*測試變量某一位是否為‘1’,是返回真,否返回假,num為待測試的數(shù),bit為位數(shù),其值從0到7,下同*/ 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) /*設(shè)置某一位*/ { 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]; } /*以下主程序演示,調(diào)用時,可以直接給出數(shù)值,也可以給出變量名*/ 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)); }
|
|