zoukankan      html  css  js  c++  java
  • 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之中,十分高效。

  • 相关阅读:
    搜索回车跳转页面
    登录验证码
    【排序算法】排序算法之插入排序
    PAT 乙级 1044 火星数字 (20 分)
    PAT 甲级 1035 Password (20 分)
    PAT 甲级 1041 Be Unique (20 分)
    PAT 甲级 1054 The Dominant Color (20 分)
    PAT 甲级 1027 Colors in Mars (20 分)
    PAT 甲级 1083 List Grades (25 分)
    PAT 甲级 1005 Spell It Right (20 分)
  • 原文地址:https://www.cnblogs.com/zollty/p/3033396.html
Copyright © 2011-2022 走看看