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


     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 }
  • 相关阅读:
    BIO、NIO、AIO有什么区别?
    java中IO流有哪些?
    List、Map、Set 三个接口,存取元素时,各有什么特点?
    Vector、ArrayList、LinkedList 的存储性能和特性?
    Java.util.Map的常用实现类有哪些?
    Java自学指南六、查一手资料
    虚拟机中Lvs配置
    m2014-software->Word2010发布博客文章至Cnblogs
    m2014-c->c模拟java的hashmap容器类
    m2014_c->c语言容器类工具列
  • 原文地址:https://www.cnblogs.com/luoweiKnowledge/p/3960715.html
Copyright © 2020-2023  润新知