首页 > 代码库 > 常见位操作:获取,设置,清零
常见位操作:获取,设置,清零
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 }
常见位操作:获取,设置,清零
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。