Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in D:\site\54cainiao\web\config\function.php on line 295 位运算的简单应用-权限管理 - 54菜鸟
11

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

  • 时间:2020-01-28 13:12 编辑:54菜鸟 来源: 阅读:503
  • 扫一扫,手机访问
摘要:位运算在实际的开发中,有很多巧妙的应用场景。如:一个存放正整数的数组,里面有一个数字只出现一次,其它数字都出现两次,求只出现一次的数字。不用临时变量,交换两个数字的值。

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


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


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


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

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


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【织梦cms|织梦技巧】织梦默认作者和默认泉源修改(2021-12-08 10:11)
【织梦cms|织梦技巧】 织梦dedecms差异栏目导航显示差异样式的方式(2021-12-08 10:09)
【织梦cms|织梦技巧】织梦dede新建模型中自定义联动类别调用(2020-03-01 13:52)
【织梦cms|织梦技巧】织梦CMS标签中出现“系统无此标签,可能已经移除”(2020-03-01 13:51)
【织梦cms|织梦技巧】dedecms织梦系统后台验证码图片不显示的解决方法(2020-03-01 13:51)
【织梦cms|织梦技巧】dedecms更新文章会出现空白页(2020-03-01 13:50)
【织梦cms|织梦技巧】让织梦dedecms搜索结果按照点击数排序(2020-03-01 13:48)
【织梦cms|织梦技巧】在dedecms织梦内容页中调用文章缩略图(2020-03-01 13:47)
【织梦cms|织梦技巧】在dedecms织梦添加自制的背景图片(2020-03-01 13:47)
【织梦cms|织梦技巧】修改织梦dedecms幻灯片属性(2020-03-01 13:46)