• 进制转化


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

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

    十进制转化为八进制就是就是十进制数直接除以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 = 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 =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;
        }
  • 相关阅读:
    numpy的shuffle函数
    特征值、特征向量
    keras的Embedding层
    自己写着玩的一个天气APP
    使用mbed进行STM32板子的开发
    提高ListView的效率
    自定义ListView里面的Item的内容
    Android控件使用自定义字体
    使用Handler类来更新UI
    MongoDB在Java下的增删查改
  • 原文地址:https://www.cnblogs.com/tech-bird/p/3892540.html
Copyright © 2020-2023  润新知