进制转换

1.十进制转为二进制

  将十进制连续对2取模    

    //十进制转为二进制
    public static void tenToBin(int num)
    {
        StringBuffer sb=new StringBuffer();
        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;
        }
        System.out.println(sb.reverse());
    }    

 

2.十进制转为十六进制

   以60举例,60的二进制如下:

  

//十进制转十六进制
public static void tenTohex(int num)
{
       StringBuffer sb=new StringBuffer();
       for(int i=0;i<8;i++)
       {
         /*取最低四位*/
         int temp=num&15; 
  
if(temp>9)   {    sb.append((char)(temp-10+'A'));   }   else   { sb.append(temp);   }   /*右移四位,去掉之前取的最低四位*/   num=num>>>4;
      if(num==0)//如果num==0,则无需继续循环
      {
        break;
      }
} System.out.pringln(sb.reverse()); } 

 3.十进制转化为所有进制

  参数说明:

  num要转化的数字,

  base要转化的进制(1二进制,7八进制,15十六进制),

  offset要取得最低位的位数(二进制1位,八进制3位,十六进制4位)

  参数解释:

    1.base和offset解释:一个数字如如果要取得最低四位,是进行“&”操作。

      如:          

        (1)60的二进制:0000-0000 0000-0000 0000-0000 0011-1100 要取得最低位,则将60与二进制的1  进行&操作,得到的就是60的二进制的最低位。

                     & 0000-0000 0000-0000 0000-0000 0000-0001 这里是要转为二进制,所以和1进行&操作,如果是八进制,则为0000-0000 0000-0000 0000-0000 0000-0111以此类推

                    ----------------------------------------------------------------------------------

                      0000-0000 0000-0000 0000-0000 0000-0000 

           这样就得到了60的二进制的最低第一位的值。

            (2)那么如何得到二进制的最低第二位呢,方法是,将60的二进制右移一位(>>>这个一位就是offset参数的意思),高位补上最高位相同的数(这里是0所以高位补0,如果是1,则补1)

        60右移之后:   0000-0000 0000-0000 0000-0000 0001-1110 再和1进行&操作,红色的0就是右移一位之后补上的0

                &    0000-0000 0000-0000 0000-0000 0000-0001

              ---------------------------------------------------------------------------------------

              0000-0000 0000-0000 0000-0000 0000-0000 还是0

         (3)继续右移操作           

          60右移之后:   0000-0000 0000-0000 0000-0000  0000-1111 再和1进行&操作,红色的0就是右移一位之后补上的0

                &    0000-0000 0000-0000 0000-0000 0000-0001

                  -----------------------------------------------------------------------------------

                0000-0000 0000-0000 0000-0000 0000-0001 与之后,就得到一,所以又得到一位

          重复以上操作,需要重复32次,因为一个二进制数有32位。

    如果是转为八进制,则一次移动3位,且&操作是111,因为三位能表示一个八进制的值,如111就是7

    十六进制同理,一次移动4位,且&操作是1111,因为4位能表示一个十六进制的值,如1111就是15

    关于>>>和>>的区别,大概是>>这个是移动之后,高位是补0,而>>>移动之后,高位是补和最高位一样的数字,如果数字是正数,则两个数没区别,如果是负数,则有区别

  代码如下:

    //十进制转化为所有进制        
    public static void tenToall(int num,int base,int offset)
    {
        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 i=pos;i<arr.length;i++)
        {
            System.out.println(arr[x]);
        }
    }

 

posted @ 2015-07-24 14:47  凌晨10点13分  阅读(292)  评论(0编辑  收藏  举报