個人博客 "http://www.milovetingting.cn" 位運算的簡單應用 許可權管理 位運算在實際的開發中,有很多巧妙的應用場景。如: 1. 一個存放正整數的數組,裡面有一個數字只出現一次,其它數字都出現兩次,求只出現一次的數字。 2. 不用臨時變數,交換兩個數字的值。 3. Andr ...
個人博客
位運算的簡單應用-許可權管理
位運算在實際的開發中,有很多巧妙的應用場景。如:
一個存放正整數的數組,裡面有一個數字只出現一次,其它數字都出現兩次,求只出現一次的數字。
不用臨時變數,交換兩個數字的值。
Android中Window設置Flag
public void setFlags(int flags, int mask) {
final WindowManager.LayoutParams attrs = getAttributes();
attrs.flags = (attrs.flags&~mask) | (flags&mask);
mForcedWindowFlags |= mask;
dispatchWindowAttributesChanged(attrs);
}
- 產品具有某些Feature,這些Feature可以利用位運算來存儲。
下麵利用位運算來簡單模擬許可權管理
許可權管理類
public class PermissionManager {
public static final int PERMISSION_NONE = 1;
public static final int PERMISSION_A = 1 << 1;
public static final int PERMISSION_B = 1 << 2;
public static final int PERMISSION_C = 1 << 3;
public static final int PERMISSION_D = 1 << 4;
private int mPermission = PERMISSION_NONE;
private static class PermissionManagerHolder {
static PermissionManager sPermissionManager = new PermissionManager();
}
private PermissionManager() {
}
public static PermissionManager getInstance() {
return PermissionManagerHolder.sPermissionManager;
}
/**
* 添加許可權
* @param permission
*/
public void addPermission(int permission) {
if (hasPermission(permission)) {
return;
}
mPermission |= permission;
}
/**
* 移除許可權
* @param permission
*/
public void removePermission(int permission) {
if (!hasPermission(permission)) {
return;
}
mPermission &= ~permission;
}
/**
* 判斷是否有許可權
* @param permission
* @return
*/
public boolean hasPermission(int permission) {
return (mPermission & permission) != 0;
}
}
使用
public static void main(String[] args) {
System.out.println("沒有添加任何許可權----------");
PermissionManager permissionManager = PermissionManager.getInstance();
checkPermission(permissionManager);
System.out.println("添加許可權A----------");
System.out.println("添加許可權B----------");
System.out.println("添加許可權C----------");
permissionManager.addPermission(PermissionManager.PERMISSION_A);
permissionManager.addPermission(PermissionManager.PERMISSION_B);
permissionManager.addPermission(PermissionManager.PERMISSION_C);
checkPermission(permissionManager);
System.out.println("刪除許可權C----------");
permissionManager.removePermission(PermissionManager.PERMISSION_C);
checkPermission(permissionManager);
}
public static void checkPermission(PermissionManager permissionManager) {
System.out.println("PERMISSION_A exist:" + permissionManager.hasPermission(PermissionManager.PERMISSION_A));
System.out.println("PERMISSION_B exist:" + permissionManager.hasPermission(PermissionManager.PERMISSION_B));
System.out.println("PERMISSION_C exist:" + permissionManager.hasPermission(PermissionManager.PERMISSION_C));
System.out.println("PERMISSION_D exist:" + permissionManager.hasPermission(PermissionManager.PERMISSION_D));
}
輸出結果:
沒有添加任何許可權----------
PERMISSION_A exist:false
PERMISSION_B exist:false
PERMISSION_C exist:false
PERMISSION_D exist:false
添加許可權A----------
添加許可權B----------
添加許可權C----------
PERMISSION_A exist:true
PERMISSION_B exist:true
PERMISSION_C exist:true
PERMISSION_D exist:false
刪除許可權C----------
PERMISSION_A exist:true
PERMISSION_B exist:true
PERMISSION_C exist:false
PERMISSION_D exist:false
位運算並不限於許可權管理,具有多個狀態的應用場景,都可以用到。