http://blog.csdn.net/fulinkster/article/details/6597938
1 package com.fh.util; 2 3 import java.math.BigInteger; 4 5 /** 6 * @author Administrator 7 * 权限计算帮助类 8 */ 9 public class RightsHelper { 10 /** 11 * 利用BigInteger对权限进行2的权的和计算 12 * @param rights int型权限编码数组 13 * @return 2的权的和 14 */ 15 public static BigInteger sumRights(int[] rights){ 16 BigInteger num = new BigInteger("0"); 17 for(int i=0; i<rights.length; i++){ 18 num = num.setBit(rights[i]); 19 } 20 return num; 21 } 22 /** 23 * 利用BigInteger对权限进行2的权的和计算 24 * @param rights String型权限编码数组 25 * @return 2的权的和 26 */ 27 public static BigInteger sumRights(String[] rights){ 28 BigInteger num = new BigInteger("0"); 29 for(int i=0; i<rights.length; i++){ 30 num = num.setBit(Integer.parseInt(rights[i])); 31 } 32 return num; 33 } 34 35 /** 36 * 测试是否具有指定编码的权限 37 * @param sum 38 * @param targetRights 39 * @return 40 */ 41 public static boolean testRights(BigInteger sum,int targetRights){ 42 return sum.testBit(targetRights); 43 } 44 45 /** 46 * 测试是否具有指定编码的权限 47 * @param sum 48 * @param targetRights 49 * @return 50 */ 51 public static boolean testRights(String sum,int targetRights){ 52 if(Tools.isEmpty(sum)) 53 return false; 54 return testRights(new BigInteger(sum),targetRights); 55 } 56 57 /** 58 * 测试是否具有指定编码的权限 59 * @param sum 60 * @param targetRights 61 * @return 62 */ 63 public static boolean testRights(String sum,String targetRights){ 64 if(Tools.isEmpty(sum)) 65 return false; 66 return testRights(new BigInteger(sum),targetRights); 67 } 68 69 /** 70 * 测试是否具有指定编码的权限 71 * @param sum 72 * @param targetRights 73 * @return 74 */ 75 public static boolean testRights(BigInteger sum,String targetRights){ 76 return testRights(sum,Integer.parseInt(targetRights)); 77 } 78 }
sumRights方法调用了BigInteger的setBit方法,实际上就是进行2的权的和运算。
比如:RightsHelper.sumRights(new int[]{1,2,3,4});实际上就是:1^2+2^2+3^2+4^2