十进制数转二进制、八进制、十六进制数Java代码

来源:互联网 发布:软件项目风险分析 编辑:程序博客网 时间:2024/06/10 01:56

  计算机在储存数据时都是按照二进制储存的,如果我们需要获取一个十进制数的二进制、八进制、十六进制数该怎么弄呢?至于原理我就不再叙述了,网上到处都是,这里只是提供Java源代码,从控制台输入一个十进制正数,然后输出其二进制、八进制、十六进制数。

 

package fourth;

import java.io.*;
/**
 * @author Jhat
 * @date 2010-5-7 下午11:48:55
 */
public class typeshift
{
   public static void main(String[] args)
   {
      int num=0;
      int[] binary=new int[33];//用于储存十进制数的二进制数(33是为了方便计算八进制数)
      int[] octonary=new int[11];//用于储存十进制数的八进制数
      String[] hexa=new String[8];//用于储存十进制数的十六进制数
      getcomplement gc=new getcomplement();
      BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
      try
      {
         num=Integer.parseInt(bf.readLine());
         binary=gc.getbinary(num);
         octonary=gc.getoctonary(binary);
         hexa=gc.gethexa(binary);
      }
      catch(IOException e)
      {
         e.printStackTrace();
      }
      System.out.print(num+"的二进制数为: ");
      for(int i=1;i<binary.length;i++)//输出二进制补码
         System.out.print(binary[i]);
      System.out.println();
      System.out.print(num+"的八进制数为: ");
      for(int i=0;i<octonary.length;i++)//输出八进制数
         System.out.print(octonary[i]);
      System.out.println();
      System.out.print(num+"的十六进制数为: ");
      for(int i=0;i<hexa.length;i++)//输出十六进制数
         System.out.print(hexa[i]);
      System.out.println();
      System.out.println("************************");

  //其实JDK类库已经提供了很方便的方法,直接就可以得到结果了
      System.out.println(Integer.toBinaryString(num).toString());
      System.out.println(Integer.toOctalString(num).toString());
      System.out.println(Integer.toHexString(num).toString()); 
     }
}

package fourth;


/**
 * @author Jhat
 * @date 2010-5-7 下午11:59:43
 */
public class getcomplement
{
   public int[] getbinary(int num)
   {
      int[] binary=new int[33];
      for(int i=0;i<binary.length;i++)//初始化数组
         binary[i]=0;
      for(int j=binary.length-1;j>0;j--)

    //由于计算机储存数据时就是按补码储存的,所以只需要不断按位取与将每一位的二进制数取出即可
      {
         if((num&1)==1)
            binary[j]=1;
         else binary[j]=0;
         num=(num>>1);
      }
      /*当然,要是完全自己弄也是可以的,不过很繁琐

      int i=binary.length-1;
      if(num<0)//num为负数
      {
       num=-num;
       //binary[0]=1;
       while(num>0)//获取该数绝对值的原码
       {
          binary[i]=num%2;
          num=num/2;
          i--;
       }
       for(int j=1;j<binary.length;j++)//按位取反
      {
          if(binary[j]==0)
          binary[j]=1;
         else binary[j]=0;
       }
       for(int j=binary.length-1;j>=0;j--)//加1
      {
          if(binary[j]==0)
          {
              binary[j]=1;
              break;
          }
          else binary[j]=0;
       }
   }
  else//num为正数
  {
     while(num>0)
     {
        binary[i]=num%2;
        num=num/2;
        i--;
       }
  }*/
  return binary;
 }

 public int[] getoctonary(int[] binary)//获取八进制数
 {
      int[] octonary=new int[11];
      for(int i=0;i<octonary.length;i++)//初始化数组
         octonary[i]=0;
      int j=octonary.length-1;
      for(int i=binary.length-1;i>0;i-=3,j--)
         octonary[j]=binary[i]+binary[i-1]*2+binary[i-2]*4;
      return octonary;
 }
 
 public String[] gethexa(int[] binary)//获取十六进制数
 {
      String[] hexa=new String[8];
      for(int i=0;i<hexa.length;i++)//初始化数组
         hexa[i]="0";
      int j=hexa.length-1;
      for(int i=binary.length-1;i>0;i-=4,j--)
      {
            int temp=binary[i]+binary[i-1]*2+binary[i-2]*4+binary[i-3]*8;
            if(temp>9)
           {
               switch(temp)
              {
         case 10:hexa[j]="a";break;
         case 11:hexa[j]="b";break;
         case 12:hexa[j]="c";break;
         case 13:hexa[j]="d";break;
         case 14:hexa[j]="e";break;
         case 15:hexa[j]="f";break;
         default:break;
       }
          }
         else
         hexa[j]=Integer.toString(temp);
       }
     return hexa;
    }
 
}