欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

位运算的简单应用-权限管理

程序员文章站 2024-01-28 15:49:16
个人博客 "http://www.milovetingting.cn" 位运算的简单应用 权限管理 位运算在实际的开发中,有很多巧妙的应用场景。如: 1. 一个存放正整数的数组,里面有一个数字只出现一次,其它数字都出现两次,求只出现一次的数字。 2. 不用临时变量,交换两个数字的值。 3. Andr ......

个人博客

位运算的简单应用-权限管理

位运算在实际的开发中,有很多巧妙的应用场景。如:

  1. 一个存放正整数的数组,里面有一个数字只出现一次,其它数字都出现两次,求只出现一次的数字。

  2. 不用临时变量,交换两个数字的值。

  3. 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);
    }
  1. 产品具有某些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

位运算并不限于权限管理,具有多个状态的应用场景,都可以用到。