1 /*常见位操作:获取,设置,清零 2 * 3 * */ 4 public class BitGet { 5 /* 6 * 该函数实现获取功能 7 * 先将1左移动i位,左移动0位变成了00000001, 8 * 然后再和Num十进制12转化为二进制00001100进行&运算, 9 * 00000001 如果是左移动两位就为 00000100 10 * 00001100 00001100 11 * -------- -------- 12 * 00000000 00000100 13 * 从而将第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的二进制码为00001100 25 * 如果把第1个位进行置位得到 26 * 00001100 27 * 00000010 28 * -------- 29 * 00001110 30 * 就是把第二位置为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的二进制为00001100 42 * 假设要清零第3位 则有 43 * 1.将1向左移动3位得 00001000 44 * 2.取反 得11110111 45 * 3.进行位与运算 46 * 11110111 47 * 00001100 48 * -------- 49 * 00000100 50 * 可以得出只是对第三位清零,其他保持不变 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 stub 59 BitGet bg = new BitGet(); 60 boolean flag=bg.getBit(12, 3); 61 System.out.println(flag); 62 int value = bg.setBit(12, 1); 63 System.out.println("置位第1位为:"+value); 64 value=bg.clearBit(12, 3); 65 System.out.println("清零第3位为:"+value); 66 67 } 68 69 }
时间: 2024-10-13 16:22:49