基础数据存储是如以下的值,就是2的次幂
1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072业务操作是选择基础数据的组合值
比如
   存入7,就是选择了1,2,4
   存入了48,就是选择了16,32
现在想把存入的值分解成选择值
比如7,想分解成 1,2,4
48,分解成 16,32
。如何实现,有熟悉的朋友请帮忙

解决方案 »

  1.   

    参考一下:
    import java.util.*;
    public class FormOfPowOf2
    {
    public static void main(String[] rags)
    {
    Scanner scan=new Scanner(System.in);
    System.out.println("请输入一个大于0小于2147483647的整数:");
    int number=scan.nextInt();
    int[] form2=cal(number);
    System.out.println("整数 "+number+" 以由下列2的幂的数组成:");
    for(int k=0;k<form2.length;k++)
    {
    System.out.print(form2[k]+"\t");
    }
    System.out.println();
    }
    //计算方法,要求x>=0,x<=2147483647。
    public static int[] cal(int x)
    {
    int shift=1;
    int[] temp=new int[32];
    int count=0;
    for(int i=0;i<temp.length;i++)
    {
    if(shift>x||shift<0) //shift这个数已经大于 x了,结束计算。
    {
    break;//no need.
    }
    int y=x & shift;
    if(y>0)
    {
    temp[count++]=(int)Math.pow(2,i);
    shift=shift<<1;
    }
    else
    {
    shift=shift<<1;
    continue;
    }
    }
    int[] result=Arrays.copyOf(temp,count); //紧缩
    return result;
    }
    }
      

  2.   

    这个一个看就是个二进制取&的问题吧