C语言对位进行操作(增删查改)
2011-11-30 13:39
260 查看
利用移位运算、位与、位或,可以查询、修改某一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之中,十分高效。
#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之中,十分高效。
相关文章推荐
- C语言对位进行操作(增删查改)
- 使用c语言对mysql进行增删查改
- DOM 进行XML操作的增删改查
- Java连接MongoDB进行增删改查的操作
- Java8下连接数据库进行增删改查(CRDU)操作
- C语言简单操作MYSQL数据库的增删查找
- C语言中利用宏进行面向对象(OOP)的操作
- Mybatis环境搭建和进行简单的CRUD增删改查操作
- AE——要素操作(一) 加载已存在shp文件,并进行增删操作
- Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
- GreenDAO进行CRUD操作【增删改查】
- 使用受管bean对数据库中数据进行增删改查操作
- C# 对MongoDB 进行增删改查的简单操作 (转)
- UVA-512-Spreadsheet Tracking 简单模拟题 对一个表进行增删操作后查表 打表写法+详细注释
- 用c语言创建一颗二叉树,用递归方法实现对其进行先序、中序和后序遍历的操作。
- C# 对MongoDB 进行增删改查的简单操作
- Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
- c语言实现循环链表的增删插入等操作
- c语言以数据块的形式对文件数据进行操作
- 使用oledb对数据库进行增删改查及批量插入操作