算法--进制转换

普通的是十进制转为二进制的方法,其实就是不断与2相除,取余数,直到不能除为止。每次取出的余数存储到数组或者其它容器(如StringBuffer)其它进制也一样。下面每个进制的转换列举一下:

class NumSys
{
    public static void main(String[] args)
    {
            toBinary(6);
            System.out.println("60的二进制表示为:"+Integer.toBinaryString(60));
            toHex(60);
            toHex1(-60);
            toBina(20);
    }
    //整数转为二进制
    public static void toBinary(int num)
    {
        StringBuffer sb=new StringBuffer();
        while(num>0)
        {
            //System.out.print(num%2);
            sb.append(num%2);
            num =num/2;
        }
        System.out.println("容器原始数据:"+sb);
        System.out.println("容器反转数据:"+sb.reverse());

    }

    //整数转十六进制
    public static void toHex(int num)
    {
        StringBuffer sb = new StringBuffer();

        for(int i=0;i<8;i++)
        {
            int temp = num&15;
            if(temp>9)
            {
            char tem = (char)(temp-10+'A');
            sb.append(tem);
            }
            else
           {
            sb.append(temp);
           }
           num = num>>>4;
        }
        System.out.println("一般方式:"+sb.reverse());
    }

    //整数转十六进制-查表法(所有元素临时存储起来,建立对应的关系)
    public static void toHex1(int num)
    {
        //StringBuffer sb = new StringBuffer();
        char[]store = new char[8];
        char []chb={'0','1','2','3',
                    '4','5','6','7',
                    '8','9','A','B',
                    'C','D','E','F'};
                    int i=0;
        while(num!=0)
        {   
            int temp = num&15;
            //sb.append(chb[temp]);
            store[i]=chb[temp];
            num =num>>>4;
            i++;
        }
        for(int j=store.length-1;j>=0;j--)
        {
            System.out.print(store[j]);
        }
        System.out.println("");
    }

    //整数转而二进制-查表法(所有元素临时存储起来,建立对应的关系)
    public static void toBina(int num)
    {
        char []chs = {'0','1'};
        char []arr = new char[32];
        int j=0;
        while(num!=0)
        {
            int temp = num&1;
            arr[j++]=chs[temp];
            num = num>>>1;
        }
        for(int k=j-1;k>=0;k--)
        {
            System.out.print(arr[k]);
        }

    }


}

观察上面的过程可以知道,其中有很多相似的步骤,所以可以 把他们抽取出来。得到下面的简洁的版本:

class Trans
{
    public static void main(String [] args)
    {

        toBin(10);
        toHex(60);
        toOcto(20);
        toHex(0);

    }
    //整数转为二进制
    public static void toBin(int num)
    {
            trans(num,1,1);
    }

    //整数转十六进制
    public static void toHex(int num)
    {
            trans(num,15,4);
    }

    //整数转八进制
    public static void toOcto(int num)
    {
            trans(num,7,3);
    }

    //转换函数
    public static void trans(int num,int base,int offset)
    {
        if(num==0)
        {
            System.out.print(0);
            return;
        }
        char []chb={'0','1','2','3',
                    '4','5','6','7',
                    '8','9','A','B',
                    'C','D','E','F'};
                    int i=0;
        char[] arr = new char[32];
        int pos = arr.length;
        while(num!=0)
        {
            int temp = num&base;
            arr[--pos]=chb[temp];
            num = num >>>offset;
        }
        //打印函数
        for(int x = pos;x<arr.length;x++)
        {
            System.out.print(arr[x]);
        }
        System.out.println("");
    }
}

你可能感兴趣的:(算法,二进制,String,存储,StringBuffer)