首页 > 代码库 > 常见位操作:获取,设置,清零

常见位操作:获取,设置,清零

 1 /*常见位操作:获取,设置,清零 2  *  3  * */ 4 public class BitGet { 5     /* 6      * 该函数实现获取功能 7      * 先将1左移动i位,左移动0位变成了00000001, 8      * 然后再和Num十进制12转化为二进制00001100进行&运算, 9      * 00000001   如果是左移动两位就为  0000010010      * 00001100                    0000110011      * --------                    --------12      * 00000000                    0000010013      * 从而将第i位除外的所有位清零,最后,检查该结果是不是为零14      * 不为零则说明第i位为1,否则就是零15      * */16     public boolean getBit(int num,int i)17     {18         return ((num&(1<<i))!=0);19     }20     /*该函数实现置位功能21      * 先将1左移动i位,得到形如00001000的值,接着,对这个值和Num进行位或运算22      * 这样只会改变第i位的值,不会影响Num其他位23      * 如下24      * 12的二进制码为0000110025      * 如果把第1个位进行置位得到26      * 0000110027      * 0000001028      * --------29      * 0000111030      * 就是把第二位置为1,其他的都不变31      * */32     public int setBit(int num,int i)33     {34         return num|(1<<i);35     }36     /*37      * 该函数实现清零功能38      * 该方法与setBit刚好相反,首先,将1向左移动i位,然后对这个值取反得到其掩码39      * 接着,对该掩码和Num执行位与运算,这样只会清零num的i位,其余位则保持不变40      * 如下41      * 12的二进制为0000110042      * 假设要清零第3位 则有43      * 1.将1向左移动3位得 0000100044      * 2.取反 得1111011145      * 3.进行位与运算46      * 1111011147      * 0000110048      * --------49      * 0000010050      * 可以得出只是对第三位清零,其他保持不变51      * */52     public int clearBit(int num,int i)53     {54         int mask=~(1<<i);55         return num &mask;56     }57     public static void main(String[] args) {58         // TODO Auto-generated method stub59         BitGet bg = new BitGet();60         boolean flag=bg.getBit(12, 3);61         System.out.println(flag);62         int value = http://www.mamicode.com/bg.setBit(12, 1);63         System.out.println("置位第1位为:"+value);64         value=http://www.mamicode.com/bg.clearBit(12, 3);65         System.out.println("清零第3位为:"+value);66         67     }68 69 }

 

常见位操作:获取,设置,清零