背景
之前做权限判定的基本都是通过Boolean
类型,但是当权限比较多的时候,此时数据库的字段
和持久层的pojo
的维护都会比较麻烦,比如如下:
1 | public final static Long OP_BIND_PHONE = 1L << 0; // 用户绑定手机状态码 |
思路
位运算法(非短路的运算符)
&(按位进行‘与’运算)
仅当两个操作数都为1时。输出结果才为1。否则为0
|(按位进行‘或’运算)
仅当两个操作数都为0时,输出的结果才为0
^(按位进行‘异或’运算)
仅当两个操作数不同一时候。对应的输出结果才为1,否则为0
~(按位进行‘取反’运算)
全部的0置为1,1置为0
http://www.runoob.com/java/java-operators.html
扩展
一个值表示多个权限
优点:操作处理比较简单
缺点:数据库查询是否繁琐
移位运算符
1 | java中有三种移位运算符 |
验证是否可行
1 | package com.smniuhe.bitStates; |
控制台可知,思路可行
1 | 1 |