位运算--通过总值分解出子值(解析子值)
通过总值分解出子值
在做权限时管理时,会经常用到位运算。我们怎么通过一个杼总值分解出各个权限值呢?
思路如下:将10进制的数值转换为2进制字符串,循环字符串各位置的值,遇到值为『1』时,则将后面的位置补『0』同时将2进数值转为10进制数。
public List<Integer> getChildNum(int totalVal) {
int itemVal;
String binaryValStr = Integer.toBinaryString(totalVal);
List<Integer> list = new ArrayList<>();
StringBuilder sbNum = new StringBuilder();
for (int i = binaryValStr.length() - 1; i >= 0; --i) {
if (binaryValStr.charAt(i) == '1') {
itemVal = Integer.parseInt("1" + sbNum.toString(), 2);
list.add(itemVal);
}
sbNum.append('0');
}
return list;
}