C語言對位進行操作(增刪查改)
利用移位運算、位與、位或,可以查詢、修改某一bit的值。程式如下
#define uchar unsigned char
/*測試變數某一位是否為‘1’,是返回真,否返回假,num為待測試的數,bit為位數,其值從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) /*設定某一位*/
{
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));
}
以上是以TC為例編寫的主程式,各函式在其它C語言中也一樣可用。
另外,下面的java程式可以計算一個整數的二進位制位中1的個數。
public static int bitCount(int i) {
// HD, Figure 5-2
i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
}
該程式取自java的庫檔案Integer.class之中,十分高效。