位運算的簡單應用-權限管理

我的博客java

http://www.milovetingting.cn數組

位運算的簡單應用-權限管理

位運算在實際的開發中,有不少巧妙的應用場景。如:spa

  1. 一個存放正整數的數組,裏面有一個數字只出現一次,其它數字都出現兩次,求只出現一次的數字。code

  2. 不用臨時變量,交換兩個數字的值。開發

  3. Android中Window設置Flagrem

public void setFlags(int flags, int mask) {
        final WindowManager.LayoutParams attrs = getAttributes();
        attrs.flags = (attrs.flags&~mask) | (flags&mask);
        mForcedWindowFlags |= mask;
        dispatchWindowAttributesChanged(attrs);
    }
  1. 產品具備某些Feature,這些Feature能夠利用位運算來存儲。

下面利用位運算來簡單模擬權限管理get

權限管理類博客

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));
    }

輸出結果:io

沒有添加任何權限----------
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

位運算並不限於權限管理,具備多個狀態的應用場景,均可以用到。

相關文章
相關標籤/搜索