首页 > 代码库 > 进制转化

进制转化

 

包括十进制转化为二进制,八进制,十六进制

 

十进制转化为二进制使用的是位移运行和位与运算

十进制转化为八进制就是就是十进制数直接除以8,得出得整数就是八进制的十位以前的数,余数是八进制个位数,然后不断循环

十进制转化为十六进制同八进制

 

package cn.Offer;import java.util.Scanner;/* * 把一个整数(任何整数,包括正数或者负数)转化为二进制 * 获取中间1的个数  *  * 各种做法都是对各种进制每位的分解再组合 * 那么组合的方式有使用字符串连接,栈,数组 * 这里使用的都是字符串连接 */public class Exam10_HexadecimalConversion {    public static void main(String[] args) {                System.out.println("请输入一个整数");                        Scanner sc= new Scanner(System.in);                int value =http://www.mamicode.com/ sc.nextInt();        System.out.println("结果:");        System.out.println("这个整数的二级制是" + ConventIntToBinary(value));        int num = NumOf1InBinary(value);        System.out.println("其中包含了"+num+"个 1 ");                        System.out.println("这个整数的八进制是" + ConventIntToBase8(value));        System.out.println("这个整数的十六进制是" + conventIntToBase16(value));                            }        /*     * 十进制转化为十六进制     */    private static String conventIntToBase16(int value) {        String strResultString = "";                while(value>16)        {                        String r = value%16+"";                        if(value%16>10)            {                r= Character.toString((char)((int)(‘A‘) + (value%16 -10)));            }                                    strResultString = r + strResultString;            value=value/16;        }                strResultString = value + strResultString;                return strResultString;    }    /*     * 十进制转化为八进制     */    private static String ConventIntToBase8(int value) {        String strResultString="";                        while(value>8)        {                        strResultString = value%8 + strResultString;            value=value/8;        }                strResultString = value + strResultString;                return strResultString;    }    /*     * 计算二进制里1 的个数     * 判断结束的标识使用flag==0     * 因为flag不断左移,移动32次之后,为0     */    private static int NumOf1InBinary(int value) {        int count = 0;                int flag = 1;        while(flag!=0)        {            if((value & flag)!=0)                count++;            flag=flag<<1;        }                return count;    }        /*     * 把十进制转化为二进制     * 返回的结果的类型     * 如果是int类型,显然不行,因为返回的是二进制,二进制可以达到32位数字,不管是int还是long类型都不可以,     * 因为32位的数字在内存中占用的是32*8位     *      * 返回字符串     *      * 判断结束的标识,     * 如果使用的是flag = 0 ,那么100返回的结果是00000000000000000000000001100100     * 使用value =http://www.mamicode.com/0,返回结果是1100100>*/    private static String ConventIntToBinary(int value) {                String strResultString = "";                int flag = 1;                while(value!=0)          {            if((value & flag)!=0)            {                strResultString = 1+strResultString ;                value = value^ flag;                                }else {                strResultString =0+ strResultString ;            }             flag = flag<<1;                               }                //return Long.parseLong(strResultString);        return strResultString;    }}

 

顺便说下把十六进制转化为十进制

/*     * 十六进制转化为十进制     */    private static int ConventBase16ToBase10(String value16) {        int result =0;                if(value16=="")        {            return 0;                    }                char[] v16 = value16.toCharArray();        for(int i=0;i<v16.length;i++)        {            int key=0;            char v = v16[v16.length-1-i];            if(v>=‘A‘ && v<=‘F‘)            {                key= v-‘A‘ +10;            }else{                key= v-‘0‘;            }                        result = result + key* (int)Math.pow(16, i);        }                return result;    }