java进制之间的转换



Java 基础  Day04  进制之间的转换
一  : 十进制转换成二进制
方法一    
class DomeToBin
{       
public static void main(String[] args) 
{

toBin(6);
}
public static void toBin(int num)
{
  while(num>0)
{
 //  将数据和2 求余数    得到得到二进制数   
     System.out.println(num%2);
   // 然后 在和2求商  得到下次的的num  进行下次循环
num=num/2;
  }
}
}






方法二   利用StringBuffer数组进行存储将得到的数据倒叙输出reserve()
class DomeToBin
{
public static void main(String[] args) 
{

toBin(6);
}
public static void toBin(int num)
{
 //01 声明StringBuffer数组进行对数据的连续存储 
 StringBuffer sb=new StringBuffer();
  while(num>0)
{  
   //把数据存储在sb数组中
 sb.append(num%2);
 num=num/2;
  }
  // 利用sb的reverse方法把数组  倒叙输出
  System.out.println(sb.reverse());
 //输出结果是   110
}
}
二 : 十进制和十六进制的转换 


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

toHex(6);
}
方法一
/*
 十进制转换成十六进制  
   思路
  将数值与15求&得到 后四位的值 然后判断得到的值是否大于10
  如果大于10  就转换成字符输出 若不是就直接输出  然后在将数据右移四位进行循环  共32位  进行8次循环
   步骤
  01 传入整型变量存储待算值 
  02 定义一个循环佛for
  03 将该数与15求&判断得到的数值是否为字母若是就转换(char)( num num-10+'A')输出 若不是就直接输出
  04 将数据进行右移4位  循环判断 直到循环判断完成   
*/
public static void toHex(int num)
{

for(int i=0;i<8;i++)
{
  int temp ;
 temp=num&15;
 if(temp>9)
 System.out.print((char)(temp-10+'A'));
 else
System.out.print(temp);
 num=num>>>4;
}
    
}
方法二 也是利用StringBuffer 的reverse  将数组中的数据倒叙输出
public static void toHex(int num)
{
StringBuffer sb =new StringBuffer();


for(int i=0;i<8;i++)
{
  int temp ;
 temp=num&15;
 if(temp>9)
//  System.out.print((char)(temp-10+'A'));
 sb.append((char)(temp-10+'A'));
 else
//System.out.print(temp);
 sb.append(temp);
 num=num>>>4;
}
    System.out.println(sb.reverse());
}


 利用数组 查表法十进制转换成十六进制


方法一 利用 for循环遍历
class  DomeToHex
{
public static void main(String[] args) 
{
 toHex(60);
}
/*
数组 查表法十进制转换成十六进制
 思路
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
 1 2 3 4 5 6 7 8 9 A  B  C  D  E  F
 利用数组与十六进制  的对应关系 将查到的值对应到数组上
 步骤
 01 定义一个char类型数组 chas 存储十六进制对应的字符   定义一个char 类型的chass数组存储查找以后的结果
 02 定义一个for循环 循环8次
 03  定义一个变量temp 存储 num& 15   然后把temp作为下标对应到到数组chas中去  然后就是把对应好的数组值 放到数组chass中去 
 04 然后就是num>>>4直到for循环结束 
 05 然后在遍历数组chass 找出查找的值
*/
public static void  toHex(int num)
{
   char[] chas={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
   char[] chass=new char[8];
   int sent=0;
   for(int i=0;i<8;i++)
{
       int  temp=num&15;
    chass[sent++]=chas[temp];
  num=num>>>4;
   }
   for(int x=0;x<sent;x++)
{
    System.out.print(chass[x]);
 
   }
 
}
}




方法二   利用while 
class  DomeToHex
{
public static void main(String[] args) 
{
 toHex(60);
}
/*
数组 查表法十进制转换成十六进制
 思路
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
 1 2 3 4 5 6 7 8 9 A  B  C  D  E  F
 利用数组与十六进制  的对应关系 将查到的值对应到数组上
 步骤
 01 定义一个char类型数组 chas 存储十六进制对应的字符   定义一个char 类型的chass数组存储查找以后的结果
 02 定义一个-while循环 
 03  定义一个变量temp 存储 num& 15   然后把temp作为下标对应到到数组chas中去  然后就是把对应好的数组值 放到数组chass中去 
 04 然后就是num>>>4直到for循环结束 
 05 然后在遍历数组chass 找出查找的值
*/
public static void  toHex(int num)
{
   char[] chas={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
   char[] chass=new char[8]; 
    // sent 用于记录 存如chass数组的次数
   int sent=0;
   //定义一个while  循环可以减少 循环次数 就是但 num 右移以后 为0 时就结束本次循环 了
  while(num!=0) 
{
       int  temp=num&15;
    chass[sent++]=chas[temp];
  num=num>>>4;
   }
    //利用for循环倒叙输出chass数组的数据
   for(int x=sent-1;x>=0;x--)
{
    System.out.print(chass[x]);
 
   }
 
}





三: 十进制转换成二进制
class  ToBin
{
public static void main(String[] args) 
{
    ToBin(6);
}
/*
十进制转换成二进制
 思路 和十进制转换成十六进制相同 
 步骤 
 01定义一个数组char的数组 用来存放 二进制数组 定义一个chass数组用来存储转换以后的数据
 02定义一个变量 sent 用来记录转换以后的的次数
 03 使用while循环 开始转换 在while里面定义一个temp的变量用来记录位移以后的数 然后在与数组chas中的数组对比
     然后在把得到的数据 存入到chass数组中 然后在  让num 向右位移一位 继续循环 
 04 利用for循环 开始遍历chass数组 输出转换以后的数值
*/
public static void ToBin(int num)
{
 char[] cha={'0','1'};
 char[] chass=new char[32];
 int sent=0;
 while(num!=0)
{
 int temp= num & 1;
     chass[sent++]=cha[temp];
     num= num >>> 1;
 }
 for(int x=sent-1;x>=0;x--)
{
     System.out.print(chass[x]);
 }


}
}




进制转换优化    
class ArrayTest 
{
public static void main(String[] args) 
{
toBin(6);
//toHex(-60);
//toBa(60);


// System.out.println(Integer.toBinaryString(6));
// System.out.println(Integer.toHexString(6));
}


/*
十进制-->二进制
*/
public static void toBin(int num)
{
trans(num,1,1);
}


/*
十进制-->八进制
*/
public static void toBa(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)
{
      //首先是判断输入的数是不是0 要是0 就可以直接输出
if(num==0)
{
System.out.println(0);
return ;
}
//char[]  是用来 存放数组表的 
char[] chs = {'0','1','2','3'
,'4','5','6','7'
,'8','9','A','B'
,'C','D','E','F'};
//arr[]是存储临时变量
char[] arr = new char[32];
        //pos 是用来作为数组arr的是下标的  
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]);
}


return ;
}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值