位操作与权限
1.
添加權限使用或
判斷權限使用與
去掉權限用異或
?
2.
2.1為什么常量都是2的冪次,而不是隨便的整數:保證一位一權限.方便與或等操作.這是使用位表示權限的前提。
2.2很多編程語言中,一組常量值都是以 0,1,2,4,8,16,32,64,比如java.sql.Connection接口中定義的常量值TRANSACTION_NONE....
2.3與運算之后移位的原因 :因為與操作后, 右邊還出現有其他0,通過移位,結果就是0或1,能簡化判斷。注意移位與初始值時的移位一樣。
2.4有幾位就可以表示幾種權限,32位可以表示32種權限。
2.4用異或去取消擁有的權限,注意添加權限使用或而不是異或,雖然0111添加1000的權限,或與異常的值是一樣的。
異或操作: 1^0=1, 0^1=1, 1^1=0 ,? 0^0=0
?
3.
示例1:常量或Enum定義
public static final int CIV_EMAIL_SYNCED = 1 << 0;public static final int CIV_USER = 1 << 1; public boolean isCIVUser (){return (getFlags(Type.FB) & CIV_USER) > 0 || isTACIVUser();}public boolean isCIVUser (){return (getFlags(Type.FB) & CIV_USER) > 0 || isTACIVUser();}?
?
示例2:權限操作
public class BitAuthorityTest {public static final int OPERATOR_PLUS = 1 << 0;public static final int OPERATOR_SUBTRACT = 1 << 1;public static final int OPERATOR_MULTIPLY = 1 << 2;public static final int OPERATOR_DIVIDE = 1 << 3;public static void main(String[] args){System.out.println(OPERATOR_PLUS + "|" + OPERATOR_SUBTRACT + "|" + OPERATOR_MULTIPLY + "|" + OPERATOR_DIVIDE);// 假設用戶的權限對應的二進制串"0111",那么,想要判斷用戶是否擁有OPERATOR_DIVIDESystem.out.println((Integer.parseInt("0111", 2) & OPERATOR_DIVIDE) >> 3);// 假設用戶的權限對應的是整數,那么,想要判斷用戶是否擁有OPERATOR_DIVIDESystem.out.println((7 & OPERATOR_DIVIDE) >> 3);// 如果想去掉用戶擁有的某個權限.可以使用異或.if ((7 & OPERATOR_MULTIPLY) >> 2 == 1){System.out.println("0111的去掉OPERATOR_MULTIPLY為:" + Integer.toBinaryString((7 ^ OPERATOR_DIVIDE)));}// 將二進制字符串轉換成整數參與與或非,使用下頁的方法.// System.out.println(Integer.parseInt("0111", 2));// // 如果想將用戶的整數權限轉換成二進制串保存,使用如下方法置換.// System.out.println(Integer.toBinaryString(7)); }}轉載于:https://www.cnblogs.com/highriver/archive/2012/07/25/2608767.html
總結
- 上一篇: eclipse自动补全的设置
- 下一篇: 常使用的webserver地址