- //根据已知n个指数值和SUM,解析SUM由哪些数组成
- int sum = 7;
- int[] arr = {1, 2, 4, 8, 16};
- for(int a : arr) {
- if(sum >= a && (sum & a) > 0) { // 使用按位与判断
- System.out.println("sum包含数:"+ a);
- }
- }
- // 打印结果:
- sum包含数:1
- sum包含数:2
- sum包含数:4
- //在只知道指数和SUM的情况下对其拆分
- int sum = 7;
- int j = 0;
- // 这里需要预先指定sum最大的位数,这里假设8(SUM最大由8位组成)
- for(int i = 0; i < 8; ++i) {
- j = (sum >>> i) % 2; // 取出右移的那一位
- j = j << i; // j * 2的次幂 = 当前的十进制数
- if(j > 0) {
- System.out.println("sum包含数:"+ j);
- }
- }
- // 打印结果:
- sum包含数:1
- sum包含数:2
- sum包含数:4
- //该片段来自于http://www.codesnippet.cn/detail/1112201411235.html
来源: http://www.codesnippet.cn/detail/1112201411235.html