位运算的简单应用-权限管理
程序员文章站
2022-05-28 14:12:17
个人博客 "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
位运算并不限于权限管理,具有多个状态的应用场景,都可以用到。