zoukankan      html  css  js  c++  java
  • 进制转换

    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]);
            }
        }
  • 相关阅读:
    CTF_论剑场-web26
    Bugku-never give up
    Bugku-你必须让他停下来
    Bugku-域名解析
    bugku-web3
    请允许我成为你的夏季——shiro、jdbcInsertall
    HTTP请求/响应报文结构
    SQL常用命令
    dialogs打开对话框选定文件夹,getopenfilename获取文件名
    fso文件夹操作用法实操
  • 原文地址:https://www.cnblogs.com/LJP-JumpAndFly/p/4673480.html
Copyright © 2011-2022 走看看