我的博客java
位運算在實際的開發中,有不少巧妙的應用場景。如:spa
一個存放正整數的數組,裏面有一個數字只出現一次,其它數字都出現兩次,求只出現一次的數字。code
不用臨時變量,交換兩個數字的值。開發
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); }
下面利用位運算來簡單模擬權限管理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
位運算並不限於權限管理,具備多個狀態的應用場景,均可以用到。