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

  • 相关阅读:
    [日常摸鱼]UVA393 The Doors 简单计算几何+最短路
    [日常摸鱼]bzoj3122 [Sdoi]2013 随机数生成器
    [日常摸鱼]积性函数求和——杜教筛
    [OI笔记]NOIP2017前(退役前)模拟赛的总结
    [日常摸鱼]poj2417 DiscreteLoggingBSGS算法
    [日常摸鱼]UVA11424&11426 GCD Extreme
    [日常摸鱼]JSOI2008最大数
    [日常摸鱼]HDU1724 Ellipse自适应Simpson法
    原码、补码、反码的作用和区别
    Fibonacci序列or兔子序列
  • 原文地址:https://www.cnblogs.com/zollty/p/3033396.html
Copyright © 2011-2022 走看看