数据结构—进制间转换

  1. 来源:http://blog.csdn.net/gzc_itheima/article/details/47679585

  2. class HexadecimalConversion  
    {  
        public static void main(String[] args)  
        {     
            toBin(6);  
            tobin(6);  
            toHex(60);  
            tohex(60);  
        }  
      
    //十进制转换为二进制;  
      
        public static void toBin(int num)  
        {  
      
            StringBuffer sb=new StringBuffer();//存储数据的对象;  
      
            while(num>0)  
            {  
                //System.out.println(num%2);  
      
                sb.append(num%2);//方法append,把模除后的值传到sb这个对象中;  
                num=num/2;  
            }  
            System.out.println(sb.reverse());//翻转顺序;reverse是StringBuffer对象的功能;  
        }  
      
    //十进制转换成十六进制;  
      
        public static void toHex(int num)  
        {  
      
            StringBuffer sb=new StringBuffer();  
            for(int x=0;x<8;x++) //十六进制数用32为二进制表示,每4位一组,最多循环8次;  
            {  
                int temp=num&15;//按位与15;  
                if(temp>9)  
                  
                    //System.out.println((char)(temp-10+'a'));  
                    sb.append((char)(temp-10+'A'));  
                else  
                    //System.out.println(temp);  
                    sb.append(temp);  
                num=num>>>4;//右移四位;  
            }  
                System.out.println(sb.reverse());  
        }  
      
    /* 
    查表法:将所有的元素临时存储起来,建立对应关系, 
    每一次&15后的值作为索引去查建立起来的表,就可以找到对应的元素;这样比-10+'a'简单的多; 
     
    这个表怎么建立啊? 
    可以通过数据的形式来定义; 
    StringBuffer reverse; 
    */  
      
        public static void tohex(int num)  
        {  
      
            char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C', 'D','E','F'};  
      
            //定义一个临时容器;数组  
      
            char[] arr=new char[8];  
      
                    //字符数组在内存中一被定义它的默认初始化值为‘\u0000’空位,u代表unicode码,java所支持的编码表;  
      
            int pos=arr.length-1;//定义一个指针  
      
            while(num!=0)  
      
            {  
                int temp=num&15;  
      
                //System.out.println(chs[temp]);  
      
                arr[--pos]=chs[temp];//先存0角标位,再++  
      
                num=num>>>4;  
            }  
      
            System.out.println("pos="+pos);  
      
                //存储数据的arr数组遍历,  
            for(int x=pos;x<arr.length;x++)//从pos开始遍历;  
            {  
                System.out.print(arr[x]+",");  
            }  
        }  
      
    //十进制转二进制  
        public static void tobin(int num)  
        {  
            //定义一个二进制的表;//int类型有32个二进制位;long有64个;  
            char[] chs={'0','1'};  
              
            //定义一个临时存储容器。  
            char[] arr=new char[32];  
      
            //定义一个操作数组的指针;  
            int pos=arr.length;  
      
            while(num!=0)  
            {  
                int temp=num&1;  
                arr[--pos]=chs[temp];  
      
                num=num>>>1;  
            }  
      
            for(int x=0;x<arr.length;x++)  
            {  
                System.out.print(arr[x]);  
            }  
        }  
    }  
      
    //优化:  
    class zhuanhuan  
    {  
        public static void main(String[] args)  
        {  
            //toBin(6);  
            //toBin(-6);  
            toHex(60);  
        }  
      
    //十进制转换成2进制;  
        public static void toBin(int num)  
            {  
             trans(num,1,1);  
        }  
      
    //十进制转换为八进制;  
         public static void toOx(int num)  
        {  
            trans(num,7,3);  
        }  
      
    //十进制转换为十六进制;   
        public static void toHex(int num)  
        {  
             trans(num,15,4);  
        }  
      
        public static void trans(int num,int base,int offset)  
        {  
      
            if(num==0)  
            {     
                           System.out.println(0);  
                   return;  
            }  
      
            char[] chs={'0','1','2','3','4','5','6','7','8', '9','A','B','C', 'D','E','F'};  
      
            char[] arr=new char[32];  
      
            int pos=arr.length;  
      
            while(num!=0)  
            {  
                int temp=num&base;  
                arr[--pos]=chs[temp];  
                num=num>>>offset;  
            }  
      
            for(int x=pos;x<arr.length;x++)  
            {  
                System.out.print(arr[x]);  
            }  
        }  
    } 
    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值