`
webcode
  • 浏览: 5955910 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

C语言对位进行操作(增删查改)

 
阅读更多

利用移位运算、位与、位或,可以查询、修改某一bit的值。程序如下

#define uchar unsigned char

/*测试变量某一位是否为‘1’,是返回真,否返回假,num为待测试的数,bit为位数,其值从07,下同*/

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之中,十分高效。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics