Java基礎:十進位轉換其他進位

來源:互聯網
上載者:User

標籤:

平時使用中,進位轉換隻要使用Integer這個封裝類中的方法即可完成。

但其實我們也能用自己的方法去實現,這有助於初學者對於電腦底層運算的理解。下面例子使用了查表形式的方法來完成的進位的轉換。

在開始前,需要先理解清楚各個進位的特點還有位的概念。

 

眾所周知,在電腦中,記憶體儲存的都是二進位的資料,即通過0,1來表示資料的內容。

位(bit)就是代表位元據個中的每一個0或1,bit是電腦中的最小單位。

需要注意的是電腦基本存放裝置單位是位元組(byte),它用8個二進位位表示,即1 byte = 8 bit。

 

java可以支援八進位,十進位,十六進位的表示,分別是:

八進位:前置0,如用八進位表示5要寫成05。

十進位:不需前置,如5就是十進位中的5.

十六進位:前置0x或者0X,如用十六進位表示5要寫成0x5。

 

如果產生值為60的int類型的資料,它在記憶體會佔用32位的空間。如下所示:

0000-0000 0000-0000 0000-0000 0011-1100

十六進位的數值用0~9和A~F這16個數來表示,當滿足16,則進位。60在java中用十六進位來表示為:0x3C,在記憶體中表現為:

 

八進位的數值用0~7這8個數來表示,當滿足8,則進位。60在java中用八進位來表示為:074,在記憶體中表現為:

從以上規律可以看出,二進位中每4個位(2的4次冪=16),就表示十六進位中1個位,而要得出16進位位上的數值,可以使用位元運算 & 15(位元1111)得出。

同理,二進位中每3個位(2的3次冪=8),就表示八進位中1個位,而要得出8進位位上的數值,可以使用位元運算 & 7(位元111)得出。

 

基於以上的分析,可以設計一下代碼:

 1 class Transform  2 { 3     public static void main(String[] args)  4     { 5         toHex(60); 6         toba(60); 7         toBin(60); 8     } 9 10 //十進位轉二進位11     public static void toBin (int num)12     {13         trans(num,1,1);14     }15 16 //十進位轉八進位17     public static void toba (int num)18     {19         trans(num,7,3);20     }21 22 //十進位轉十六進位23     public static void toHex (int num)24     {25         trans(num,15,4);26     }27 28 //    具體轉換過程。29 //    方法中第一個參數為需要轉換的數 ,第二參數為位元運算&上的數,第三個參數為要移動的二進位位。30     public static void trans (int num,int base,int offset)31     {32 //        定義一個數組,角標對應數值,可以看做一個查詢表。33         char[] chs = {‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘};34         char[] arr = new char[32];35         int pos = arr.length;36 37         if(num==0)38         {39 //            如果要轉換的數為0,則無需轉換。40             System.out.println(0);41         }42 43         while(num!=0)44         {45 //            得出指定進位中每一位的數值,存入一個數組中。46             int temp = num & base;47             arr[--pos] = chs[temp];48 //            每得出一個指定進位一個位上的值後,原數值的二進位位就往右移動指定位元,並在前面補零。49             num = num >>> offset;      //移位補零。50         }51         52         for(int x=pos;x<arr.length;x++)53         {54             if (x==(arr.length-1)) {55                 System.out.println(arr[x]);                56             } else {57                 System.out.print(arr[x]);    58             }59         }60     }61 }

 

Java基礎:十進位轉換其他進位

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.