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


     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 }
  • 相关阅读:
    查看索引执行次数
    解决TFS服务器重命名后,无法访问的问题
    C#匿名方法增加、删除委托
    Silverlight 4 正确设置 ScrollViewer让它更好的支持鼠标滚轮
    Win8 loading 动画 Silverlight版本
    Silverlight控件自适应利器UseLayoutRounding属性(解决自适应抖动问题)
    添加从Web下载的dll引用,VS提示错误
    IQueryable<T>获取查询计划(SQL)
    WinForm多线程+委托防止界面假死
    ASP.net(c#)生成条形码 code39条码生成方法
  • 原文地址:https://www.cnblogs.com/luoweiKnowledge/p/3960715.html
Copyright © 2020-2023  润新知