java位运算

按位与(&)

按位与的运算规则

操作数1

0

0

1

1

操作数2

0

1

0

1

按位与

0

0

0

1

规则总结:只有两个操作数对应位同为1时,结果为1,其余全为0. (或者是只要有一个操作数为0,结果就为0)。

举例:

 

按位或(|)

按位或的运算规则

操作数1

0

0

1

1

操作数2

0

1

0

1

按位或

0

1

1

1

规则总结:只有两个操作数对应位同为0时,结果为0,其余全为1.(或者是只要有一个操作数为1,结果就为1)。

按位非(~)

按位非的运算规则

操作数

0

1

按位非

1

0

按位异或(^)

按位异或的运算规则

操作数1

0

0

1

1

操作数2

0

1

0

1

按位异或

0

1

1

0

左位移(<<)

算术右移(>>): 符号位不变,低位补0。如:2<<2结果为8。m<<n结果为m*2^n。

右位移(>>)

低位溢出,符号位不变,并用符号位补溢出的高位。如:-6>>2结果为-2。

无符号右移(>>>)

低位溢出,高位补0。注意,无符号右移(>>>)中的符号位(最高位)也跟着变,无符号的意思是将符号位当作数字位看待。如:-1>>>1


位运算实现权限控制

public class Permission {
   
    // 是否允许查询,二进制第1位,0表示否,1表示是  
    public static final int ALLOW_SELECT = 1 << 0; // 0001  = 1
      
    // 是否允许新增,二进制第2位,0表示否,1表示是  
    public static final int ALLOW_INSERT = 1 << 1; // 0010  = 2
      
    // 是否允许修改,二进制第3位,0表示否,1表示是  
    public static final int ALLOW_UPDATE = 1 << 2; // 0100  =4
      
    // 是否允许删除,二进制第4位,0表示否,1表示是  
    public static final int ALLOW_DELETE = 1 << 3; // 1000  = 8
    // 存储目前的权限状态  
    private int flag; 
    //设置用户的权限
    public void setPer(int per) {
       flag = per;
    }
    //增加用户的权限(1个或者多个)
    public void enable(int per) {
       flag = flag|per;
    }
  //删除用户的权限(1个或者多个)
    public void disable(int per) {
        //&~ 先 ~per,后 flag&
       flag = flag&~per;
    }
    //判断用户的权限
    public boolean isAllow(int per) {
       return ((flag&per)== per);
    }
    //判断用户没有的权限
    public boolean isNotAllow(int per) {
       return ((flag&per)==0);
    }
  
    public static void main(String[] args) {
      int flag = 15;
      Permission permission = new Permission();
      permission.setPer(flag);
      permission.disable(ALLOW_DELETE|ALLOW_INSERT);
      System.out.println("select = "+permission.isAllow(ALLOW_SELECT));
      System.out.println("update = "+permission.isAllow(ALLOW_UPDATE));
      System.out.println("insert = "+permission.isAllow(ALLOW_INSERT));
      System.out.println("delete = "+permission.isAllow(ALLOW_DELETE));
   }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值